本文简述 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