一、手动备份
1、首先创建备份路径(mkdir /var/bak)
2、使用命令进行实现数据库备份
备份单个数据库的数据命令
mysqldump -uroot -p --databases vc_rubbish_platfrom> /var/bak/vc_rubbish_plarform.sql
报错:
解决mysqldump:command not found问题
ln -fs /usr/local/mysql/mysql-8.0/bin/mysqldump /usr/bin
再次执行并输入密码
mysqldump -uroot -p --databases vc_rubbish_platfrom> /var/bak/vc_rubbish_plarform.sql
查看备份文件是否备份成功
3、使用命令还原备份
mysql -uroot -p < /var/bak/vc_rubbish_plarform.sql
二、定时备份
1、找到合适位置创建文件夹,放置脚本文件和备份数据
创建路径
mkdir -p /usr/local/msyql/mysql_backup
进入创建的路径
cd /usr/local/mysql/mysql_backup
创建脚本并填充数据
vi mysql_backup.sh
2、mysql_backup.sh脚本的内容,执行数据备份
#!/bin/bash
#================基础参数===============
user="root"
password="密码"
port="3306"
#备份库名列表,括号内多个数据库空格隔开
db_name_array=("vc_rubbish_platform" "sys")
#备份位置(若不存在,会自动创建)
datafile_path="/usr/local/mysql/backup/database_bak"
#mysqlDump的绝对位置,基本为mysql安装路径
mysqlDump_path="/usr/bin/mysqldump"
#是否删除.sql文件(包含子目录): ON开启,其他字符不开启
rf_switch="ON"
#数据保留天数(按文件修改时间计算)
expire_day=10
#================非开发人员勿改================
#备份最终路径
bak_path="${datafile_path}/${db_name}"
#错误日志文件名称
error_log="${bak_path}/${db_name}_error.log"
#================备份执行指令================
#判断文件夹,不存在则创建
if [ ! -d "$bak_path" ]
then
mkdir -p ${bak_path}
echo "已创建文件夹${bak_path}"
fi
#判断mysql是否开启
checkPort=`lsof -i:${port} | wc -l`
if [ "$checkPort" -gt "0" ]
then
echo "mysql 已启动"
else
echo "mysql 未启动无法进行备份"
echo "mysql 未启动无法进行备份" > $error_log
fi
#执行备份
for db_name in ${db_name_array[*]}
do
${mysqlDump_path} -u${user} -p${password} --databases $db_name | gzip > ${bak_path}"/"$db_name$_$(date +%Y%m%d_%H%M%S).sql.gz 2>>${error_log}
done
#删除过期文件
if [ $rf_switch == "ON" ]
then
find ${bak_path} -name "*.sql" -mtime +${expire_day} | xargs rm -f
fi
3、脚本增加权限
chmod +x ./mysql_backup.sh
4、测试脚本运行
sh ./mysql_backup.sh
查看log日志
vi vc_rubbish_platform_error.log
因为mysql自5.7版本开始,考虑到mysql的安全性而更改对保护机制,在mysqldump备份数据库对时候不能直接在命令行上书写数据库的密码
解决方法修改mysql配置文件m /etc/my.conf
加入下面内容:
[mysqldump]
user=root
password=你的密码
修改mysql_backup.sh脚本文件
${mysqlDump_path} --defaults-extra-file=/etc/my.cnf --databases $db_name | gzip > ${bak_path}"/"$db_name$_$(date +%Y%m%d_%H%M%S).sql.gz 2>>${error_log}
测试脚本并查看
5、恢复脚本执行的备份文件
恢复gz备份文件
#1.解压gz文件
#直接解压默认删除原压缩文件
gunzip /usr/local/mysql/backup/database_bak/vc_rubbish_platform20220530_113928.sql.gz
进入MySQL
mysql -u root -p
#3.恢复备份数据
source /usr/local/mysql/backup/database_bak/vc_rubbish_platform_20220530_115614.sql
6、linux定时执行脚本
查看crontab的定时任务
crontab -l
创建crontab的定时任务
#编辑crontab定时任务
crontab -e
#可以先用这个测试,每一分钟执行一次。
*/1 * * * * /usr/local/mysql/mysql_backup/mysql_backup.sh
#每天凌晨1点执行
0 1 * * * /usr/local/mysql/mysql_backup/mysql_backup.sh
查看
7、crontab定时时间
例如:
0 */2 * * * /sbin/service httpd restart 意思是每两个小时重启一次apache
50 7 * * * /sbin/service sshd start 意思是每天7:50开启ssh服务
50 22 * * * /sbin/service sshd stop 意思是每天22:50关闭ssh服务
0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘
1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \; 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30执行一次ls命令
三、Mysql数据库自动备份到另一台服务器
1、配置服务器 ssh
ssh-keygen -t rsa
运行这句,一直敲击回车,会在当前目录下生成两个文件,我使用的是 xftp 查看的文件,把 ha.pub 里的内容全选复制。
来到目标服务器,也是进入 /root/.ssh 文件夹,把刚刚复制的内容粘贴进 authorized_keys 的尾部(authorized_keys 可能没有,自己新建,里面可以有多个 key,互不影响,换一行粘贴就行了)
保存,这样我们两台服务器的 ssh 连接就建立好了。
2、修改自动备份 sh 文件
将mysql_backup.sh中添加备份服务器
${mysqlDump_path} --defaults-extra-file=/etc/my.cnf --databases $db_name | gzip > ${bak_path}"/"$db_name$_$(date +%Y%m%d_%H).sql.gz 2>>${error_log}
sshpass -p 服务器密码 scp ${bak_path}$db_name$_$(date +%Y%m%d_%H).sql.gz root@42.192.143.116:/var/backup/mysql
执行.sh文件
报错
编译安装sshpass
# wget https://nchc.dl.sourceforge.net/project/sshpass/sshpass/1.06/sshpass-1.06.tar.gz
# tar zxf sshpass-1.06.tar.gz
# cd sshpass-1.06
# ./configure --prefix=/usr/local/
# make && make install
安装完成后继续执行.sh文件
3、查看备份服务器是否备份成功
cd /var/backup/mysql