笺注:这是在 CentOS6.9编译安装Zabbix4.4.5 的基础上进行的。
先创建存放备份文件的目录:
[root@Zabbix_server_01 ~]# mkdir -p /home/backup
[root@Zabbix_server_01 ~]# chmod -R 777 /home/backup
确认备份命令mysqldump已经安装:
[root@Zabbix_server_01 ~]# which mysqldump
/usr/bin/mysqldump
### 在服务器本地备份单个库 ###
[root@Zabbix_server_01 ~]# mysqldump -u"root" -p"888" -h"localhost" zabbix > /home/backup/zabbix_bak.sql
[root@Zabbix_server_01 ~]#
注释:
备份库zabbix
使用数据库管理员root@localhost,密码为888
在服务器本地登录时, -h"localhost" 是可以省略的
备份出来的文件:
[root@Zabbix_server_01 ~]# du -sh /home/backup/zabbix_bak.sql
3.5M /home/backup/zabbix_bak.sql
[root@Zabbix_server_01 ~]#
### 在服务器本地还原单个库 ###
使用数据库管理员root@localhost登录MySQL:
mysql -u"root" -p"888" -h"localhost"
注释:在服务器本地登录时, -h"localhost" 是可以省略的。
删除库zabbix:(还原前,最好删除旧库)
mysql> drop database zabbix;
Query OK, 149 rows affected (0.59 sec)
重新创建库zabbix,并指定其字符集:
mysql> create database zabbix character set utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
切换到库zabbix:
mysql> use zabbix;
Database changed
以防中文出现乱码,最好先设置一下编码规则:
mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)
还原单个库(zabbix):
mysql> source /home/backup/zabbix_bak.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql>
备注:实验中,库zabbix的还原是成功的。
######
在服务器本地自动创建库、表的Shell脚本:
[root@Zabbix_server_01 ~]# cat create-database.sh
#!/bin/bash
mysql_user="root"
mysql_password="888"
mysql_database="data1"
mysql -u$mysql_user -p$mysql_password << EOF > /dev/null
Create database ${mysql_database} character set utf8 collate utf8_bin;
Use ${mysql_database};
create table table1(
id int not null auto_increment,
number varchar(50) not null,
name varchar(50),
address varchar(50),
primary key (id)
);
create table table2(
id int not null auto_increment,
number varchar(50) not null,
name varchar(50),
address varchar(50),
primary key (id)
);
create table table3(
id int not null auto_increment,
number varchar(50) not null,
name varchar(50),
address varchar(50),
primary key (id)
);
EOF
运行脚本:
[root@Zabbix_server_01 ~]# bash create-database.sh
[root@Zabbix_server_01 ~]#
运行脚本后的结果:
[root@Zabbix_server_01 ~]# mysql -u"root" -p"888" -h"localhost" -e"show create database data1;"
+----------+---------------------------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------------------------+
| data1 | CREATE DATABASE `data1` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */ |
+----------+---------------------------------------------------------------------------------+
[root@Zabbix_server_01 ~]#
注释:创建了一个库data1,其字符集为 utf8_bin
[root@Zabbix_server_01 ~]# mysql -u"root" -p"888" -e"use data1;show tables;"
+-----------------+
| Tables_in_data1 |
+-----------------+
| table1 |
| table2 |
| table3 |
+-----------------+
[root@Zabbix_server_01 ~]#
注释:在库data1中创建了表table1、table2、table3
######
往库data1里的表table1中添加一条记录:
Use data1;
insert into table1 (number,name,address) values ('A001','zhuohua','佛山');
SELECT * FROM table1;
######
往库data1里的表table2中添加一条记录:
Use data1;
insert into table2 (number,name,address) values ('B001','Python','广州');
SELECT * FROM table2;
######
往库data1里的表table3中添加一条记录:
Use data1;
insert into table3 (number,name,address) values ('C001','Mary','深圳');
SELECT * FROM table3;
### 在服务器本地一次性备份多个库 ###
[root@Zabbix_server_01 ~]# mysqldump -u"root" -p"888" --databases zabbix data1 > /home/backup/aa.sql
[root@Zabbix_server_01 ~]#
注释:一次性备份多个库要加上参数“--databases”;多个库(zabbix、data1)之间使用空格隔开。
备份出来的文件:
[root@Zabbix_server_01 ~]# du -sh /home/backup/aa.sql
3.7M /home/backup/aa.sql
[root@Zabbix_server_01 ~]#
######
备份成功后,删除库zabbix:
mysql> drop database zabbix;
Query OK, 149 rows affected (0.71 sec)
mysql>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| data1 |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
mysql>
######
备份成功后,删除库data1里的表table1:
Use data1;
Drop table table1;
mysql> SELECT * FROM data1.table1;
ERROR 1146 (42S02): Table 'data1.table1' doesn't exist
mysql>
######
备份成功后,继续往库data1里的表table2中添加一条记录:
Use data1;
insert into table2 (number,name,address) values ('B002','Happy','广州');
SELECT * FROM data1.table2;
######
备份成功后,继续往库data1里的表table3中添加一条记录:
Use data1;
insert into table3 (number,name,address) values ('C002','李大杰','广州');
SELECT * FROM table3;
再更改库data1的表table3的表名为table3_bak:
Use data1;
alter table table3 rename to table3_bak;
show tables;
### 在服务器本地一次性还原多个库 ###
[root@Zabbix_server_01 ~]# mysql -u"root" -p"888" < /home/backup/aa.sql
[root@Zabbix_server_01 ~]#
注释:
只还原了库zabbix、data1,不影响不相关的库。
这种方法不用先创建库。
######
还原成功后,查看所有的库:
笺注:库zabbix的所有表都还原了。
被还原的库的字符集不会改变:
mysql> show create database zabbix;
+----------+-----------------------------------------------------------------+
| Database | Create Database |
+----------+-----------------------------------------------------------------+
| zabbix | CREATE DATABASE `zabbix` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
mysql> show create database data1;
+----------+---------------------------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------------------------+
| data1 | CREATE DATABASE `data1` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */ |
+----------+---------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
######
还原成功后,查看库data1里的表:
######
还原成功后,查看库data1的表table1的表数据:
######
还原成功后,查看库data1的表table2的表数据:
######
还原成功后,查看库data1的表table3的表数据:
######
还原成功后,查看库data1的表table3_bak的表数据:
结论:
还原某个库时,假如库里的某个表不存在,会还原备份文件里的表;
假如表名重复,会被备份文件里的表直接替换;假如表名不重复,则不处理。
######
还原成功后,删除库data1的表table3,再更改库data1的表table3_bak的表名为table3:
mysql> drop table data1.table3;
Query OK, 0 rows affected (0.00 sec)
mysql> alter table data1.table3_bak rename to data1.table3;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> use data1;
Database changed
mysql> show tables;
+-----------------+
| Tables_in_data1 |
+-----------------+
| table1 |
| table2 |
| table3 |
+-----------------+
3 rows in set (0.00 sec)
mysql>
注释:这样就可以实现只还原某个库里的一些表了。
### 使用脚本在服务器本地备份数据库 ### (只备份库zabbix)
[root@Zabbix_server_01 ~]# cat backup_local_1.sh
#!/bin/bash
mysql_user="root"
mysql_password="888"
conn="-u$mysql_user -p$mysql_password"
mysql_database="zabbix"
dir="/home/backup" #备份文件存放的目录要先创建好,并设置好权限
cmd="/usr/bin/mysqldump" #备份命令的路径使用which mysqldump查询
time=`date +%Y%m%d` #时间格式:年月日
mysql_name="$mysql_database-$time"
cd $dir/
$cmd $conn $mysql_database > $mysql_name.sql
设置脚本权限:
[root@Zabbix_server_01 ~]# chmod a+x backup_local_1.sh
[root@Zabbix_server_01 ~]#
运行脚本:
[root@Zabbix_server_01 ~]# bash backup_local_1.sh
[root@Zabbix_server_01 ~]#
运行脚本后的结果:(备份成功)
[root@Zabbix_server_01 ~]# du -ah /home/backup/
4.0M /home/backup/zabbix-20200208.sql
3.5M /home/backup/zabbix_bak.sql
3.7M /home/backup/aa.sql
12M /home/backup/
[root@Zabbix_server_01 ~]#
### 使用脚本在服务器本地备份数据库 ### (备份库zabbix、data1)
[root@Zabbix_server_01 ~]# cat backup_local_2.sh
#!/bin/bash
mysql_user="root"
mysql_password="888"
conn="-u$mysql_user -p$mysql_password"
mysql_database="zabbix data1"
dir="/home/backup"
cmd="/usr/bin/mysqldump"
time=`date +%Y%m%d_%H%M%S` #时间格式:年月日_时分秒
mysql_name="bb-$time" #备份文件的名称
cd $dir/
$cmd $conn --databases $mysql_database > $mysql_name.sql
设置脚本权限:
[root@Zabbix_server_01 ~]# chmod a+x backup_local_2.sh
[root@Zabbix_server_01 ~]#
运行脚本:
[root@Zabbix_server_01 ~]# bash backup_local_2.sh
[root@Zabbix_server_01 ~]#
运行脚本后的结果:(备份成功)
[root@Zabbix_server_01 ~]# du -ah /home/backup/
4.0M /home/backup/zabbix-20200208.sql
3.5M /home/backup/zabbix_bak.sql
3.7M /home/backup/aa.sql
4.0M /home/backup/bb-20200208_135445.sql
16M /home/backup/
[root@Zabbix_server_01 ~]#
### 使用脚本在远程服务器备份数据库 ###
被备份的服务器(192.168.168.130)要创建一个远程数据库用户并授权:
授权远程数据库用户zhuohua@'192.168.168.154'(密码886),仅仅在使用IP地址192.168.168.154时可以进行访问,对所有的库有完全控制的权限:
[root@Zabbix_server_01 ~]# mysql -u"root" -p"888" -e"grant all on *.* to zhuohua@'192.168.168.154' identified by '886';"
[root@Zabbix_server_01 ~]#
查看远程数据库用户zhuohua@'192.168.168.154'的权限:
[root@Zabbix_server_01 ~]# mysql -u"root" -p"888" -e"show grants for zhuohua@'192.168.168.154';"
+-------------------------------------------------------------------------------------------------------------------------------+
| Grants for zhuohua@192.168.168.154 |
+-------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'zhuohua'@'192.168.168.154' IDENTIFIED BY PASSWORD '*F961C54AFEB4D281CE53D7CB8E7822890D86FFFC' |
+-------------------------------------------------------------------------------------------------------------------------------+
[root@Zabbix_server_01 ~]#
编辑防火墙规则:(打开TCP 3306端口)
[root@Zabbix_server_01 ~]# iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
[root@Zabbix_server_01 ~]# iptables-save > /etc/sysconfig/iptables
############
Linux客户端远程登录MySQL服务器:
[root@centos8 ~]# mysql -u"zhuohua" -p"886" -h"192.168.168.130"
注释:
MySQL服务器的IP地址 192.168.168.130
数据库用户名 zhuohua
密码 886
端口 3306
笺注:
Linux客户端需要安装MySQL或MariaDB
Linux客户端的IP地址为 192.168.168.154
使用数据库用户zhuohua@'192.168.168.154'
在Linux客户端查看数据库里有哪些库:
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| data1 |
| mysql |
| performance_schema |
| zabbix |
+--------------------+
5 rows in set (0.001 sec)
MySQL [(none)]>
注释:远程数据库用户 zhuohua@'192.168.168.154' 可以登录MySQL,对所有的库有完全控制的权限。
在Linux客户端确认备份命令mysqldump已经安装:
[root@centos8 ~]# which mysqldump
/usr/bin/mysqldump
在Linux客户端先创建存放备份文件的目录:
[root@centos8 ~]# mkdir -p /backup
[root@centos8 ~]# chmod -R 777 /backup
### 在Linux客户端远程备份单个库(zabbix) ###
[root@centos8 ~]# mysqldump -u"zhuohua" -p"886" -h"192.168.168.130" zabbix > /backup/zabbix_bak.sql
[root@centos8 ~]#
备份出来的文件:
[root@centos8 ~]# du -sh /backup/zabbix_bak.sql
4.2M /backup/zabbix_bak.sql
[root@centos8 ~]#
### Linux客户端远程备份数据库的脚本 ### (只备份库zabbix)
[root@centos8 ~]# cat backup_remote_1.sh
#!/bin/bash
mysql_user="zhuohua"
mysql_password="886"
mysql_host="192.168.168.130" #被备份的服务器的IP地址
conn="-u$mysql_user -p$mysql_password -h$mysql_host"
mysql_database="zabbix"
dir="/backup"
cmd="/usr/bin/mysqldump" #使用Linux客户端的备份命令mysqldump
time=`date +%Y%m%d`
mysql_name="$mysql_database-$time"
cd $dir/
$cmd $conn $mysql_database > $mysql_name.sql
设置脚本权限:
[root@centos8 ~]# chmod a+x backup_remote_1.sh
[root@centos8 ~]#
运行脚本:
[root@centos8 ~]# bash backup_remote_1.sh
[root@centos8 ~]#
备份出来的文件:
[root@centos8 ~]# du -ah /backup/
4.2M /backup/zabbix_bak.sql
3.6M /backup/zabbix-20210423.sql
7.7M /backup/
[root@centos8 ~]#
### Linux客户端远程备份数据库的脚本 ### (备份库zabbix、data1)
[root@centos8 ~]# cat backup_remote_2.sh
#!/bin/bash
mysql_user="zhuohua"
mysql_password="886"
mysql_host="192.168.168.130" #被备份的服务器的IP地址
conn="-u$mysql_user -p$mysql_password -h$mysql_host"
mysql_database="zabbix data1"
dir="/backup"
cmd="/usr/bin/mysqldump"
time=`date +%Y%m%d_%H%M%S`
mysql_name="bb-$time"
cd $dir/
$cmd $conn --databases $mysql_database > $mysql_name.sql
设置脚本权限:
[root@centos8 ~]# chmod a+x backup_remote_2.sh
[root@centos8 ~]#
运行脚本:
[root@centos8 ~]# bash backup_remote_2.sh
[root@centos8 ~]#
备份出来的文件:
[root@centos8 ~]# du -ah /backup/
4.2M /backup/zabbix_bak.sql
3.6M /backup/zabbix-20220423.sql
3.6M /backup/bb-20210423_153142.sql
12M /backup/
[root@centos8 ~]#
相关文章:
MySQL的字符集
MySQL5.6使用mysql_config_editor
使用SQLyog远程管理MySQL
LNMP一键安装包(lamp_Apache2.4用户验证+phpMyAdmin)
本地备份站点目录和数据库+crontab计划任务
远程备份站点目录和数据库+at一次性计划任务
CentOS6使用Python3脚本备份站点(Zabbix)+crontab计划任务
Windows下MySQL的备份和还原 |