Linux 配置 MySQL 定时自动备份到另一台服务器
前言
此方案可使一台服务器上的 MySQL 中的所有数据库每天 0 点自动转储为 .sql 文件,然后将文件同步到另一台服务器上,可以作为一个简单的数据容灾。
一、配置服务器 ssh
从一台服务器同步文件到另一台服务器,需要使两台服务器之间建立 ssh 连接,不然每次执行备份的时候你还要半夜爬起来去输入服务器密码。
1 | ssh-keygen -t rsa |
运行这句,一直敲击回车,会在 /root/.ssh
目录下生成两个文件,我使用的是 xftp 查看的文件,这个 .ssh 文件夹是隐藏文件夹
,所以 xftp 下面看不到,你要手动输入地址 /root/.ssh 就可以进去了,把 id_rsa.pub
里的内容全选复制。
来到目标服务器,也是进入 /root/.ssh
文件夹,把刚刚复制的内容粘贴进 authorized_keys
的尾部(authorized_keys 可能没有,自己新建,里面可以有多个 key,互不影响,换一行粘贴就行了)
保存,这样我们两台服务器的 ssh 连接就建立好了。
二、编写自动备份 sh 文件
在数据库所在的服务器新建一个 sh 文件,放在哪里、怎样命名都随意(此处注意!!!不要使用 xftp 右键新建文件来编写 sh 文件,那样编码会出问题,比如新建的文件名后面会多出一个问号“?”,使用命令行vim或vi来新建
)
1 | mkdir mysqlAutoBackupTo24 |
我建立的文件夹是这样的
AutoBackup.sh 里面的内容
1 | #下面生成的sql在本服务器存放的文件夹,就是我上面建立的 |
mysqldump
的 -h 后面写所在服务器的 IP,也就是24,不要写 localhost,因为如果是离线安装的 mysql 可能没有 mysqld.socket ,导致连接失败。
scp -P 122
是指定 ssh 端口,不指定默认为 22,root 是目标服务器24 的用户名
scp
的 --databases dba dbb
的意思是指定备份 dba 和 dbb 这个两个数据库,指定多个数据库要加 –databases ,数据库用空格隔开,上面一句注释掉的是 --all-databases
,意思是备份全部数据库,但是我的报错,不知道为什么。你们可以试一下。
下面我们运行一下这个 sh 看看效果,cd 到你的 sh 存放的文件夹 sh AutoBackup.sh
,首次进行 ssh 连接要输入一个 yes
回车,然后去目标服务器 24 查看,sql 文件已经同步过去。
三、设置定时自动执行
上面的测试没有问题,下面我们设定一个每天 0 点自动执行 sh 脚本,就可以失效每天的自动同步。
首先赋予要执行的 shell 脚本权限,给高一点,不然没法自动执行
1 | chmod 777 /data/mysqlAutoBackupTo24/AutoBackup.sh |
输入下面语句,vim 会打开一个文件
1 | crontab -e |
里面这样写,保存,前面的 02 00 * * *
是 cron 表达式,代表每天 00:02 执行 /data/mysqlAutoBackupTo24/AutoBackup.sh
,之所以设置 00:02 是因为避免服务器在 0 点的时候有其他数据同步任务,所以晚一点。cron 表达式的语法你们可以学一下。
1 | 02 00 * * * sh /data/mysqlAutoBackupTo24/AutoBackup.sh |
保险起见再刷新一下配置
1 | service crond reload |
总结
感谢https://blog.csdn.net/qq_33966519/article/details/103761673这篇文章,Windows 的 MySQL 备份要编写一个 bat 文件,在系统自带的计划任务里设置定时,后面研究研究再写吧。