使用Shell脚本实现自动备份MySQL数据库

目的:

192.168.100.20服务器对192.168.100.10服务器上的MySQL数据库进行备份。

1、配置MySQL服务器

1)100.10MySQL服务器登录MySQL创建两个数据库

[ ~]# mysql -uroot 
mysql> create database liyanxin;
mysql> create database wangzhaojun;

2)liyanxin数据库创建表,写入数据

mysql> create table liyanxin.liyanxin (姓名 char(6),性别 char(5),年龄 tinyint,电话 char(11));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into liyanxin.liyanxin values (‘bob‘,‘男‘,‘18‘,‘11111111111‘);
Query OK, 1 row affected (0.00 sec)
mysql> insert into liyanxin.liyanxin values (‘tom‘,‘女‘,‘20‘,‘22222222222‘);
Query OK, 1 row affected (0.00 sec)
mysql> select * from liyanxin.liyanxin;
+--------+--------+--------+-------------+
| 姓名   | 性别   | 年龄   | 电话        |
+--------+--------+--------+-------------+
| bob    | 男     |     18 | 11111111111 |
| tom    | 女     |     20 | 22222222222 |
+--------+--------+--------+-------------+
2 rows in set (0.00 sec)

3)wangzhaojun数据库创建表,写入数据

mysql> create table wangzhaojun.wangzhaojun (姓名 char(6),性别 char(5),年龄 tinyint,电话 char(11));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into wangzhaojun.wangzhaojun values (‘bob‘,‘男‘,‘18‘,‘11111111111‘);
Query OK, 1 row affected (0.00 sec)
mysql> insert into wangzhaojun.wangzhaojun values (‘tom‘,‘女‘,‘20‘,‘22222222222‘);
Query OK, 1 row affected (0.00 sec)
mysql> select * from wangzhaojun.wangzhaojun;
+--------+--------+--------+-------------+
| 姓名   | 性别   | 年龄   | 电话        |
+--------+--------+--------+-------------+
| bob    | 男     |     18 | 11111111111 |
| tom    | 女     |     20 | 22222222222 |
+--------+--------+--------+-------------+
2 rows in set (0.00 sec)

4)在100.10服务器上授权专门用来备份数据库的账号,并赋予相应的权限

mysql> grant select,lock tables on *.* to ‘bob‘@‘192.168.100.%‘ identified by ‘‘;
Query OK, 0 rows affected (0.00 sec)
        <!--备份数据库需要账号具有查看表和锁定表的权限-->

2、配置备份服务器

1)安装MySQL客户端,手动备份测试是否成功

[ ~]# yum -y install mysql
[ ~]# mysqldump -u bob  -h 192.168.100.10 --databases liyanxin > liyanxin.sql
[ ~]# ls
liyanxin.sql

2)编写备份脚本

[ ~]# mkdir -p /opt/backup             <!--创建备份后的存放目录-->
[ ~]# vim mysql.sh         <!--编写shell脚本-->
#!/bin/bash
<!--定义数据库连接、目标信息库等信息:-->
user="bob"      <!--授权的账户-->
pass=""       <!--授权账户的密码-->
host="192.168.100.10"    <!--目标服务器IP地址-->
conn="-u $user -p$pass -h $host"
data1="liyanxin"             <!--备份的数据库名字-->
data2="wangzhaojun"    <!--备份的数据库名字-->
bak="/opt/backup"          <!--指定备份目录-->
cmd="/usr/bin/mysqldump"      <!--指定命令工具-->
time=`date +%Y-%m-%d-%H-%M`      <!--定义时间变量-->
name_1="$data1-$time"        <!--定义备份后的名字-->
name_2="$data2-$time"        <!--定义备份后的名字-->
cd $bak           <!--切换至备份目录下-->
$cmd $conn --databases $data1 > $name_1.sql      <!--备份为.sql文件-->
$cmd $conn --databases $data2 > $name_2.sql      <!--备份为.sql文件-->
/bin/tar zcf $name_1.tar.gz $name_1.sql --remove > /dev/null    <!--打包后删除源文件-->
/bin/tar zcf $name_2.tar.gz $name_2.sql --remove > /dev/null    <!--打包后删除源文件-->

3)测试脚本备份是否成功

[ ~]# ./mysql.sh
[ ~]# cd /opt/backup/
[ backup]# ls
liyanxin-2020-05-20-02-10.tar.gz  wangzhaojun-2020-05-20-02-10.tar.gz

4)设置计划任务实现自动备份

[ ~]# mv mysql.sh /opt/backup/    <!--将脚本也移至备份目录-->
[ ~]# crontab -e     <!--编辑计划任务-->
*/5       *       *       *       *       /opt/backup/mysql.sh     <!--每五分钟备份一次-->
[ ~]# systemctl status crond        <!--确保crond服务已运行-->
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since 三 2020-05-20 01:20:56 CST; 37min ago
 Main PID: 829 (crond)
   CGroup: /system.slice/crond.service
           └─829 /usr/sbin/crond -n

————————————本文到此结束,感谢观看——————————————

相关推荐