系列文章目录
第1章 MySQL系列文章之子查询
第2章 MySQL系列文章之表的操作和约束
第3章 MySQL系列文章之表的视图和存储过程
第4章 MySQL系列文章之逻辑架构
第5章 MySQL系列文章之存储引擎
第6章 MySQL系列文章之索引的数据结构
第7章 MySQL系列文章之索引的创建与设计原则
第8章 MySQL系列文章之索引的性能分析工具的使用
第9章 MySQL系列文章之索引优化与查询优化
第10章 MySQL系列文章之数据库其它调优策略
第11章 MySQL事务和事务日志
第12章 MySQL的锁
第13章 MySQL的多版本并发控制
第14章 MySQL日志和主从复制
第15章 基于Docker的MySQL备份
一、docker内数据库手动备份
1.1、方式一:多行命令
1、 查看容器
docker ps
2、 进入容器
docker exec -it 容器id /bin/bash
3、 备份数据
mysqldump 数据库名称 -uroot -p >/root/**.sql
回车输入数据库密码:
4、退出容器
exit
5、把容器中的文件copy出来放到root文件下
docker cp 容器id:/root/**.sql /root/
6、参考mysqldump命令
1.备份全部数据库的数据和结构
mysqldump -uroot -p123456 -A > /data/mysqlDump/mydb.sql
2.备份全部数据库的结构(加 -d 参数)
mysqldump -uroot -p123456 -A -d > /data/mysqlDump/mydb.sql
3.备份全部数据库的数据(加 -t 参数)
mysqldump -uroot -p123456 -A -t > /data/mysqlDump/mydb.sql
4.备份单个数据库的数据和结构(,数据库名mydb)
mysqldump -uroot-p123456 mydb > /data/mysqlDump/mydb.sql
5.备份单个数据库的结构
mysqldump -uroot -p123456 mydb -d > /data/mysqlDump/mydb.sql
6.备份单个数据库的数据
mysqldump -uroot -p123456 mydb -t > /data/mysqlDump/mydb.sql
7.备份多个表的数据和结构(数据,结构的单独备份方法与上同)
mysqldump -uroot -p123456 mydb t1 t2 > /data/mysqlDump/mydb.sql
8.一次备份多个数据库
mysqldump -uroot -p123456 --databases db1 db2 > /data/mysqlDump/mydb.sql
1.2、方式二:一行命令
sudo docker exec mysql(容器名) sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /var/backup/music_`date +\%F`.sql
二、docker内数据库定时备份
2.1、方式一:一行命令脚本
#每天两点执行一次;删除旧版本的备份;进入容器;进行备份;定义备份的命名以时间戳结尾
0 2 * * * find /mydictory/backup/ -mtime +1 -name "*.sql" -delete && sudo docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -proot --all-databases' > /mydictory/backup/数据库名_bk_`date +\%Y-\%m-\%d-\%H-\%M-\%S`.sql
2.2、方式二:用脚本实现定时远程备份docker 内MySQL 到其他linux服务器
1、编写sh脚本,并手动测试
mysql_backup_script.sh脚本内容:
#!/bin/bash
#保存备份个数,备份31天数据
number=31
#备份保存路径
backup_dir=/root/mysqlbackup
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#备份工具
tool=mysqldump
#用户名
username=root
#密码
password=数据库密码
#将要备份的数据库
database_name=数据库名
#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then
mkdir -p $backup_dir;
fi
#简单写法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql
#$tool -u $username -p$password $database_name > $backup_dir/$database_name-$dd.sql
sudo docker exec mysql sh -c 'exec mysqldump -uroot -p数据库密码 --databases 库名' > $backup_dir/库名_bk_$dd.sql
#写创建备份日志
echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt
#找出需要删除的备份
delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | head -1`
#判断现在的备份数量是否大于$number
count=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | wc -l`
if [ $count -gt $number ]
then
#删除最早生成的备份,只保留number数量的备份
rm $delfile
#写删除文件日志
echo "delete $delfile" >> $backup_dir/log.txt
fi
#远程传输到另一台服务器,可以是本地服务器;scp功能要提前配置好。这行命令删掉后,备份就不会远程复制到别的服务器
scp -P 22 -r $backup_dir/ root@远程服务器IP:/root/
scp备份IP写本地能备份到win系统本地,但是要安装配置其他winscp软件
注意:
1、sh文件放到linux里后,调整文档类型为unix
vi mysql_backup_script.sh
:set ff#查看文档类型,应该是doc,要改为unix
:set ff=unix
:wq
2、手动测试sh脚本,查看语法是否正常
./mysql_backup_script.sh
看备份文件夹下是否有备份文件,文件内容是否正确,根据情况修改sh脚本。
一般mysqldump语句会出错,认真修改。
3、查看远程服务器内备份文件夹下是否有文件。
这一步在之前scp测试时,应该配置好免密scp传输,后面讲scp配置。
2、#写定时任务脚本
crontab -e
mysqlRollBack.cron脚本内容:
#每天凌晨2点执行该sh脚本:定时语法可以百度
* 2 * * * ./mysql_backup_script.sh
注意:
mysqlRollBack.cron脚本,要放在linux中打开,进入文件后,回车一次
vi mysqlRollBack.cron
3、#运行脚本
crontab mysqlRollback.cron
4、#检查定时任务是否已创建
crontab -l
5、 #查看是否正常执行
cat /var/spool/mail/root
cat /dev/null > /var/spool/mail/root #删除邮件内容
6、查看定时任务日志
tail -f /var/log/cron
7、crond 服务开启、关闭、重启
systemctl start、stop、restart crond
三、服务器配置scp,实现远程传输文件
配置scp远程传输文件:
以下以 A 服务器 和 B 服务器说明,将 A 服务器文件拷贝到 B 服务器
①、 A 和B服务器生都成公钥私钥
分别到两个服务器对应的备份目录
ssh-keygen -t rsa
一路回车就可以,需要定制可自行修改
生成之后,多了两个文件,id_rsa 私钥,id_rsa.pub 公钥
②、将 A 服务器的公钥追加到 B 服务器的 /root/.ssh/authorized_keys 认证文件中,若没有该文件则新建
复制 A 服务器 /root/.ssh/id_rsa.pub 公钥
追加到 B 服务器/root/.ssh/authorized_keys 认证文件
③、A 服务器运行免密登陆 scp 命令
命令:把ABC文件夹下所有文件 复制到远程服务器root目录下。不需要输入密码验证了。
scp -P 22 -r ABC/ root@远程服务器IP:/root/
④、B 服务器查看,远程备份成功
以上就是 scp 传输文件到另一台服务器的简单使用
四、还原数据
4.1、非容器中还原
1:直接命令还原
mysql -uroot -p123456 < /var/backup/emp_2022-03-15.sql
2:进入mysql后source还原
mysql -uroot -p source /var/backup/emp_2022-03-15.sql
参考:
1、https://blog.youkuaiyun.com/qq_41538097/article/details/119729610
2、https://blog.youkuaiyun.com/qq_41538097/article/details/119143001
3、https://blog.youkuaiyun.com/zhang_java_11/article/details/115210231
4、https://blog.youkuaiyun.com/qq_29216579/article/details/108823625