文章目录
- mysqldump教程
- 自用脚本
- 宿主机脚本:
- 备份机脚本
mysqldump教程
备份数据库的命令为:
mysqldump -ubackup -pxxxxx db1 > db1.sql
如果是远程的MySQL服务,还可以加上IP和Port,例如:
mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3306 db1 > db1.sql
mysqldump工具常用的几个用法,如下:
- 只备份表结构,不备份数据
mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3306 -d db1 > db1.sql
- 只备份数据,不备份表结构
mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3306 -t db1 > db1.sql
- 只备份指定表
mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3306 db1 tb1 > db1_tb1.sql
- 备份全部数据库
mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3306 -A > all_db.sql
- 备份指定多个库
mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3308 -B db1 db2 > db12.sql
- 恢复数据:
mysql -uroot -pxxxxx dbname < xxx.sql
自用脚本
下面是博主自己用的脚本 注意看注释 修改相应文件夹名、数据库名、主机ip名之后
主服务器和从服务器各执行对应脚本即可
宿主机脚本:
# 这个dbbk是文件夹名(database backup)
mkdir dbbk||true
# 这个dbbk-simplepassword.des3是加密的des文件名
rm -rf dbbk-simplepassword.des3||true
# 这里演示admin config_db两个不同库的操作
mysqldump -uroot -pyourDatabasePassword admin > ./dbbk/admin.sql
mysqldump -uroot -pyourDatabasePassword config_db > ./dbbk/config_db.sql
# 这一步是将dbbk文件夹下的sql文件压缩 为了安全 我们需要添加压缩密码
tar -zcvf - dbbk|openssl des3 -salt -k yourPassword | dd of=dbbk-simplepassword.des3
# 休眠 等待接收方的nc端口先开启
sleep 10s
# 需要先install nc ,通过nc 将主服务器的压缩文件 发送至从服务器
# nc教程 在我的另一篇博客
#
# 在传输过程中 端口是开放的 传输完毕本次nc就结束 且nc命令要发送方和接收方文件名一致 才能传输成功 我们的des3文件名 也可以理解为是个传输密码
# 即使在短暂的传输过程中还是可能被猜测到文件名并接收到他人的恶意脚本 所以des3文件命名不宜过于简单
# xxx.x.x.x是从服务器主机ip 9980是端口
nc -v xxx.x.x.x 9980 < dbbk-simplepassword.des3
备份机脚本
#恢复数据:
#mysql -uroot -pxxxxx dbname < xxx.sql
# 9980是本机开放的端口(用于接收的端口 记得防火墙先开放)
nc -l -v 9980 > dbbk-simplepassword.des3
dd if=dbbk-simplepassword.des3 |openssl des3 -d -k yourPassword|tar zxf -
for item in `ls dbbk`; do
# <<EOF表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主Shell。而EOF可以换成任何其他字符都可以。注意结尾的EFO前面不能有任何字符 必须顶格写
# 登陆你另一台从服务器数据库
mysql -uroot -pyourSlaveDbPassword <<EFO
create database if not exists `echo $item|tr -d ".sql"` character set utf8;
EFO
# 去除.sql后缀 导入成数据库名(前提是导出时就是这种规范格式)
mysql -uroot -pyourSlaveDbPassword `echo $item|tr -d ".sql"` < ./dbbk/$item
done