安装和初始化数据库
删除已安装数据库
CentOS 7+ 不再默认使用 MySQL 数据库,而是 MariaDB 数据库。
直接安装 MySQL 会与 MariaDB 的文件冲突。
rpm -qa | grep mysql # 查看下是否有系统自带 mysql 的 rpm 包
rpm -qa | grep mariadb # 查看下是否有系统自带 mariadb 的 rpm 包
rpm -e --nodeps xxx 或 yum -y remove xxx # 如果有,需要删除自带的旧rpm包。
安装
centos7之前的安装方法
yum install mysql mysql-server # 安装 Mysql (版本可能有点低)
centos7这样安装mysql
下载地址直接到官网下载,地址:https://dev.mysql.com/downloads/mysql/
注意: 下载使用 yum 安装的包
方法一
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
# yum install mysql-community-server
方法二(推荐)
rpm -qa | grep mysql # 查看下是否有系统自带mysql的rpm包
rpm -e --nodeps xxx 或 yum -y remove xxx # 如果有,需要删除自带的旧rpm包。
wget https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm
yum localinstall mysql57-community-release-el6-11.noarch.rpm
yum install mysql-community-server
启动
service mysqld start # 启动Mysql
chkconfig mysqld on # 设置开机启动Mysql
初始化
mysql 5.x
接着输入(配置向导)
mysql_secure_installation
配置Mysql:(所有提示yes or no 都选yes)
Set root password? [Y/n] # 设置root密码
Remove anonymous users? [Y/n] # 删除匿名用户
Disallow root login remotely? [Y/n] # 禁止root用户远程登录
Remove test database and access to it? [Y/n] # 删除默认的 test 数据库
Reload privilege tables now? [Y/n] # 刷新授权表使修改生效
开发模式下往往需要授权root用户远程登录
mysql> grant all on *.* to root@'%' identified by '111111';
mysql> flush privileges;
mysql 8.x
安装完mysql之后,会生成一个临时的密码让root用户登录
使用临时密码登录mysql -u root -p
更改临时密码
此时只能用复杂密码,只有重置密码后才能更改密码策略然后设置简单密码
alter user 'root'@'localhost' identified by '111111aA,';
查看当前密码策略show variables like 'validate_password.%';
策略说明
validate_password.length 是密码的最小长度,默认是8,我们把它改成4(好像最小就是4位密码)
输入:set global validate_password.length=4;
validate_password.policy 验证密码的复杂程度,我们把它改成0
输入:set global validate_password.policy=0;
validate_password.check_user_name 用户名检查,用户名和密码不能相同,我们也把它关掉
输入:set global validate_password.check_user_name=off;
再执行修改密码
alter user 'root'@'localhost' identified by '111111';
中文乱码配置
mysql 5.x 为了避免数据库存放的中文是乱码,我们还需要设置Mysql的编码:
vi /etc/my.cnf
写入以下内容:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
保存退出,重启Mysql:
service mysqld restart
数据库操作
数据库创建
新建数据库和用户
mysql 5.7
mysql -u root -p # 输入设置好的密码
create database ghost; # 创建ghost数据库
grant all privileges on testDB.* to test@'%' identified by '111111'; # 授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限),密码为111111,密码随意
flush privileges; # 重新读取权限表中的数据到内存,不用重启mysql就可以让权限生效
mysql 8.x
登录和创建数据库
mysql -u root -p # 输入设置好的密码
create database testDB; # 创建 testDB 数据库
创建用户
语法: create user '$userName'@'$host' identified by '$passWord';
如:create user 'testUser'@'%' identified by '111111';
$userName 代表你要创建的此数据库的新用户账号
$host 代表访问权限,如下
- %代表通配所有host地址权限(可远程访问)
- localhost 为本地权限(不可远程访问)
- 指定特殊Ip访问权限 如10.138.106.102
$passWord 代表你要创建的此数据库的新用密码
用户授权
语法:grant $auth on $databaseName.$table to '$userName'@'$host';
如:grant all privileges on testDB.* to testUser@'%'
$auth 代表权限,如下
- all privileges 全部权限
- select 查询权限
- select,insert,update,delete 增删改查权限
- select,[…]增…等权限
$databaseName 代表数据库名
$table 代表具体表,如下
- *代表全部表
- A,B 代表具体A,B表,如 testDB.A
$userName 代表用户名
$host 代表访问权限,同上
刷新
切记一定要刷新授权才可生效flush privileges;
查看用户权限
语法:show grants for '$userName'@'$host';
如:show grants for 'testUser'@'localhost';
$userName 代表用户名
$host 代表访问权限,同上
mysql的一些常用命令
- 登录:mysql -u root -p
- 查询所有数据库:show databases;
- 使用数据库:use databaseName;
- 查询所有表:show tables;
- 查询表的所有字段的数据:select * from tableName;
- 删除数据库:drop database database_name;
- 删除用户:Delete FROM user Where User='userName'
- 简单描述表结构,字段类型:desc tabl_name;
数据库备份和恢复
mysqldump基本语法:
mysqldump -u username -p dbname table1 table2 ...-> BackupName.sql
dbname:表示数据库的名称;
table1和table2:表示需要备份的表的名称,为空则整个数据库备份;
BackupName.sql:参数表设计备份文件的名称,文件名前面可以加上一个绝对路径。通常将数据库被分成一个后缀名为sql的文件;
数据备份
- 备份一个数据库:
mysqldump -u root -p dbname > D:\backup.sql
- 备份多个数据库:
mysqldump -u root -p --databases dbname2 dbname2 > Backup.sql
- 备份所有数据库:
mysqldump -u root -p -all-databases > BackupName.sql
- 备份表:
mysqldump -u root -p dbname table1 table2 > D:\backup.sql
数据还原
还原使用mysqldump命令备份的数据库的语法如下:
mysql -u root -p [dbname] < backup.sql
数据库自动备份
备份
1,登陆远程机 执行备份命令 结果集压缩传输到本地
2,使用 crontab 定时自动备份
[root@xx ~]# vim /root/back.sh
写入
ssh xxx "mysqldump -f --all-databases|bzip2 -c" > /backup/$(date +"%Y-%m-%d").bzip2
注意:ssh xxx 需要配置ssh免密码登陆。请移步: 使用key登录远程服务器
解压到文件
bzip2 -c -d $(date +%w).bzip2 > all.sql
还原到数据库
bzip2 -c -d $(date +%w).bzip2|mysql
定时器
查看定时器的相关参数含义
[root@xx ~]# cat /etc/crontab
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
创建定时器
[root@xx ~]# crontab -e // 打开一个vi编辑器
写入
* * * * * /root/backmysql.sh
保存退出,重启定时器
[root@xx ~]# service crond restart
systemctl restart crond.service(centos 7)
到此,就完成了计划任务的自动定时备份数据库