本文简述 Linux 环境下 MySQL 的安装与配置方法.
 
CentOS 7.0 + MySQL 5.7 Community 
 
1. 配置 yum 源 在 MySQL 官网中下载 yum 源 rpm 安装包: http://dev.mysql.com/downloads/repo/yum/ 
1 2 3 4 wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm yum localinstall mysql57-community-release-el7-8.noarch.rpm 
 
检查 MySQL 源是否安装成功
1 2 3 4 5 6 yum repolist enabled | grep "mysql.*-community.*"  mysql-connectors-community/x86_64 MySQL Connectors Community                 153 mysql-tools-community/x86_64      MySQL Tools Community                      110 mysql57-community/x86_64          MySQL 5.7 Community Server                 424 
 
可以修改  /etc/yum.repos.d/mysql-community.repo  , 以改变默认安装的 mysql 版本
 
2. 安装 MySQL 1 yum install mysql-community-server 
 
默认配置文件路径: 配置文件:/etc/my.cnf 日志文件:/var/log//var/log/mysqld.log 服务启动脚本:/usr/lib/systemd/system/mysqld.service socket文件:/var/run/mysqld/mysqld.pid
 
3. 启动 MySQL 服务 1 2 3 systemctl start mysqld				 systemctl status mysqld				 systemctl restart mysqld			 
 
4. 设置开机启动 1 2 systemctl enable  mysqld systemctl daemon-reload 
 
5. 修改 root 本地登录密码 MySQL 安装完成之后可使用如下命令在 /var/log/mysqld.log  文件中生成了一个 root 账号的临时密码. 
1 grep 'temporary password'  /var/log /mysqld.log 
 
使用生成的临时密码登录 MySQL 后修改成别的密码即可.
1 2 3 4 5 6 mysql -uroot -p mysql> set  password for  'root' @'localhost' =password('NewPassword' ); mysql> ALTER USER 'root' @'localhost'  IDENTIFIED BY 'NewPassword' ;  
 
mysql 5.7 默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
 
若非要使用简单的密码, 可修改密码策略, 在 /etc/my.cnf 文件如下代码, 重启后 MySQL 服务 ( systemctl restart mysqld ) 后生效.
1 2 validate_password_policy=0 
 
6. 常用配置 通过修改 /etc/my.cnf  文件,在 [mysqld] 下添加配置完成. 具体用法看注释. 修改配置后记得重启 MySQL 服务.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [mysqld] character_set_server=utf8 init_connect='SET NAMES utf8'  port=3906 bind-address=0.0.0.0 max_user_connections=30            			 max_connections=1000										 
 
6. 查看配置与状态 登录进入 MySQL 后 
show variables like '%变量名%' 可查看 MySQL 的配置信息, 通常可通过*/etc/my.cnf* 文件进行配置. 
show status like '%变量名%' 可查看 MySQL 状态 
 
以下是常用命令:
1 2 3 4 5 6 7 8 9 mysql> show variables like '%character%' ; mysql> show variables like '%port%' ; mysql> show full processlist; mysql> show status like 'Threads%' ; 
 
7. 备份与恢复 1 2 3 4 5 6 7 mysqldump -uroot -p dbName > ~\dbName.dmp mysqldump -uroot -p --opt -R dbName > ~\dbName.dmp mysql -u root -p dbName < ~\dbName.dmp 
 
上面代码中 dbName 为数据库名.
 
    
7.1 定时自动备份 7.1.1 创建目录 1 2 3 mkdir -p /data/mysqlbak/data mkdir -p /data/mysqlbak/scripts mkdir -p /data/mysqlbak/logs 
 
7.1.2 自动备份  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 cd  /data/mysqlbak/scriptsvi backup.sh BACKUP_ROOT=/data/mysqlbak BACKUP_FILEDIR=$BACKUP_ROOT /data   DATE=$(date +%Y%m%d) DATABASES=$(mysql -uroot -p123456 -e "show databases"  | grep -Ev "Database|sys|information_schema|performance_schema|mysql" ) for  db in  $DATABASES do echo echo  ----------$BACKUP_FILEDIR /${db} _$DATE .sql.gz BEGIN----------mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db}  | gzip > $BACKUP_FILEDIR /${db} _$DATE .sql.gz echo  ----------$BACKUP_FILEDIR /${db} _$DATE .sql.gz COMPLETE----------echo done echo  "done" 
 
设置备份脚本执行权限
 
将备份操作加入到定时任务(每天凌晨2点执行)
1 2 3 crontab -e 00 2 * * * /data/mysqlbak/scripts/backup.sh > /data/mysqlbak/logs/backup.log 2>&1 
 
 
7.1.2 自动删除备份 
创建删除脚本(删除7天前的备份数据)
1 2 3 4 5 6 vi backup_clean.sh echo  ----------CLEAN BEGIN----------find /data/mysqlbak/data -mtime +7 -name "*.gz"  -exec  rm -rf {} \; echo  ----------CLEAN COMPLETE----------
 
设置删除脚本执行权限
1 chmod 777 backup_clean.sh 
 
将删除备份操作加入到定时任务(每天凌晨1点执行)
1 00 1 * * * /data/mysqlbak/scripts/backup_clean.sh > /data/mysqlbak/logs/backup_full_clean.log 2>&1 
 
 
7.1.3 备份到远程机器 通过上述方法备份完成后, 可通过 scp 拷贝到另一台机器
 
修改备份脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #!/bin/bash BACKUP_ROOT=/data/mysqlbak BACKUP_FILEDIR=$BACKUP_ROOT /data DATE=$(date +%Y%m%d) DATABASES=$(mysql -uroot -p123456 -e "show databases"  | grep -Ev "Database|sys|information_schema|performance_schema|mysql" ) for  db in  $DATABASES do echo echo  ----------$BACKUP_FILEDIR /${db} _$DATE .sql.gz BEGIN----------mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db}  | gzip > $BACKUP_FILEDIR /${db} _$DATE .sql.gz echo  ----------$BACKUP_FILEDIR /${db} _$DATE .sql.gz COMPLETE----------echo  ---------- SCP BEGIN ----------expect -c "      spawn scp -r /data/mysqlbak/data/${db} _$DATE .sql.gz root@xxx.xxx.xxx.xxx:/data/mysqlbak/     expect {         \"*assword\" {set timeout 300; send \"此处是scp的密码\r\"; exp_continue;}         \"yes/no\" {send \"yes\r\";}     } expect eof" echo  ---------- SCP END ----------echo done echo  "done" 
 
    
        
 
参考:
[1] https://blog.csdn.net/xyang81/article/details/51759200 
[2] https://www.cnblogs.com/blazeZzz/p/10881297.html