定时备份即是在Mysql的生产环境中启动一个定时任务,每隔一段时间使用mysqldump工具执行一次备份。
1.创建shell脚本
cd /home/joyulf/
mkdir mysql_data_back
touch /mysql_data_back/mysql.sh
vim /mysql_data_back/mysql.sh
在mysql.sh填入以下内容,根据实际情况进行修改
#!/bin/sh
cd /home/joyulf/mysql_data_back
echo "已切换到备份目录,开始备份..."
mv bakmysql* /home/joyulf/mysql_data_back
echo "旧文件已保存到/home/joyulf/mysql_data_back"
Now=$(date +"%d-%m-%Y")
Mysqlpd="root"
File=bakmysql-$Now.sql.gz
echo "开始dump数据库..."
mysqldump -uroot -p$Mysqlpd dms_erp | gzip > $File
echo "dump success!开始远程复制..."
passwd="root"
# expect <<EOF
# spawn /usr/bin/scp $File root@10.19.3.13:/usr/local/$File
# expect {
# "密码:"
# {
# send "$passwd\n"
# }
# "pass"
# {
# send "$passwd\n"
# }
# "yes/no"
# {
# sleep 5
# send_user "send yes"
# send "yes\n"
# }
# eof
# {
# sleep 5
# send_user "eof\n"
# }
# }
# send "exit\r"
# expect eof
# EOF
echo "复制全部完成!即将退出..."
下面是截至到2019.1.25备份情况
下面是邮箱也收到备份的压缩包:
sh mysql.sh备份报错mysqldump执行时Got error: 1045: Access denied for user 'root'@'localhost' (using p时,
mysqldump执行时Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect
解决办法
登录mysql客户端
mysql -hserverip -uroot -p
mysql> use mysql;
Database changed
mysql> update user set password=password('new password') where user='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
2.安装crontab
crontab命令用来将crontab文件提交给cron进程执行
yum install -y vixie-cron
yum install -y crontabs
yum install -y expect #用作自动密码登录
等到操作完成。检查是否已安装:
$ service crond status
crond 已停
crond 启动停止
启动服务: service crond start
关闭服务: service crond stop
重启服务: service crond restart
重新载入配置:service crond reload
查看crontab服务状态:service crond status
手动启动crontab服务:service crond start
查看crontab服务是否已设置为开机启动,执行命令:ntsysv
没有就加入开机自动启动:免得每次手动启动麻烦:chkconfig --level 35 crond on
3.创建定时任务
创建一个每晚2点执行一次mysql备份时程表:
touch bakcron
vi bakcron
加入一下内容,保存退出。(或者直接执行crontab -e 进行编辑)
0 2 * * * /bin/sh /home/joyulf/mysql.sh
/home/joyulf/mysql.sh为数据库备份操作脚本
4.执行定时任务
在命令行输入
crontab bakcron
查看/var/spool/cron目录,可以看到有文件名为用户名的文件。
"crontab -l" 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本
rsync 无密码 传输
现在我们来设置ssh,以便在执行ssh操作时不需要密码,使用ssh-keygen在本地生成公钥和私钥。
|
提示:当提示输入密码时,只需输入两次回车键,不指配密码字符。
3.使用ssh-copy-id将公匙拷贝至远程主机
执行ssh-copy-id,将通过ssh-keygen生成的公匙拷贝至远程主机。
|
提示:执行以上操作时,将会提示输入远程主机帐户和密码,然后就会自动将公匙拷贝至远程目录。
无需密码通过ssh来执行rsync
现在,你可以不需要密码就可以ssh连接到远程主机
|
退出 exit
重新来执行rsync,现在应该就不会提示输入密码了
rsync -avzt /home/mysql_data_back/dms_erp/mysql_back root@10.19.3.13:/home/joyulf/mysql_data_back/rsync