mysqldump明文密码实现数据库分库备份和恢复

发布于 2020-09-04  1.24k 次阅读


备份命令:mysqldump

MySQL数据库自带的一个很好用的备份命令。是逻辑备份,导出 的是SQL语句。也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备份的文件的过程。

mysqldump的关键参数

-B:指定多个库,在备份文件中增加建库语句和use语句
--compact:去掉备份文件中的注释,适合调试,生产场景不用
-A:备份所有库
-F:刷新binlog日志
--master-data:在备份文件中增加binlog日志文件名及对应的位置点
-x  --lock-all-tables:锁表
-l:只读锁表
-d:只备份表结构
-t:只备份数据
--single-transaction:适合innodb事务数据库的备份
   InnoDB表在备份时,通常启用选项--single-transaction来保证备份的一致性,原理是设定本次会话的隔离级别为Repeatable read,来保证本次会话(也就是dump)时,不会看到其它会话已经提交了的数据。
在高版本的MySQL中用 mysqldump 命令实现数据库备份,脚本如下:
for dbname in `mysql -hlocalhost -uadmin -p'a123456' -e "show databases;" | grep -Evi "database|infor|perfor"`
do
    mysqldump -uroot -p"123456" --events -B $dbname | gzip > /mnt/${dbname}_bak.sql.gz
done
但是需将密码明文方式显示在命令上,但在运行时会报错:
mysqldump: [Warning] Using a password on the command line interface can be insecure.
这是mysql的登录安全机制,那么我们如何在mysqldump命令中明文传输密码并实现备份呢?
解决方法:用 mysql_config_editor 生成登录密钥。
mysql_config_editor set --login-path=mylogin --host=localhost --user=test --password

输入密码,会生成一个名为 mylogin 的登陆点,密钥保存在 ~/mylogin.cnf 中,然后在mysql命令行中,只需要指定登陆点名称(如:mydb)即可:

mysql --login-path=mylogin 

mysqldump 备份指令:

mysqldump --login-path=mylogin test >> backup.sql

以下为具体备份脚本供参考:

#/bin/bash
#挂载远程共享盘
IP=$1
mount -t cifs -o username=Admin,password="XXX" //192.168.1.149/DatasBackup/Mysql /backmysql
date=`date +%F`
echo $date
back_dir=/backmysql/$IP/$date
if [ ! -d $back_dir ]
then
    mkdir -p $back_dir
else
    echo "目录已经存在,跳过创建..."
fi
for i in `mysql --login-path=mylogin -e "show databases;" | grep -Evi "database|infor|perfor"`
do
   mysqldump --login-path=mylogin --events -B $i | gzip > $back_dir/${i}_bak.sql.gz
done
sleep 60
#删除超过15天以前的备份,即保留15天备份
find /backmysql/$IP/ -type d -mtime +15 |xargs rm -rf
cd /tmp
umount /backmysql

可以看到已经按照日期分库备份了

更详细参数参考

https://www.cnblogs.com/linuxk/p/9371475.html


公交车司机终于在众人的指责中将座位让给了老太太