第1章 Mysql异地备份方案
1.1 方案一:主主复制进行热备份
1.1.1主主复制原理:双机热备就是通过搭建主主复制架构进行互相同步,从而保证两边的数据库一致。
1.1.2主主复制做异地备份的好处:
- 可以实现负载均衡,减少数据库的负担,提供更快的服务;
- 可以实现灾备,当一个主库宕了,切到另一个主库进行提供服务;
1.1.3主主复制的做法:
1.主主复制原理图
2.修改两台服务器配置文件
修改主服务器配置文件,增加如下
#vi /etc/my.cnf
[mysqld] server-id=1 log-bin=mysql-bin log-slave-updates binlog-ignore-db = mysql binlog-ignore-db = information_schema binlog-ignore-db = performance_schema replicate-wild-ignore-table = mysql.% replicate-wild-ignore-table = information_schema.% replicate-wild-ignore-table = performance_schema.% expire_logs_days=5 |
修改从服务器配置文件,增加如下
#vi /etc/my.cnf
[mysqld] log-bin=mysql-bin log-slave-updates binlog-ignore-db = mysql binlog-ignore-db = information_schema binlog-ignore-db = performance_schema replicate-wild-ignore-table = mysql.% replicate-wild-ignore-table = information_schema.% replicate-wild-ignore-table = performance_schema.% expire_logs_days=5 |
3. 重启mysql服务(两台都需要重启)
#systemctl restart mysqld
4. 配置主主
(1) [FH-UMP1]mysql 为主库
FH-UMP1
#mysql -p(123456) mysql> show master status; |
FH-UMP2
#mysql -p(123456) mysql> show slave status; mysql> stop slave; mysql>change master to master_host='192.168.198.149',master_user='root',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154; mysql> start slave; mysql> show slave statusG |
详细信息如下:
mysql> show slave statusG
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.183
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: FH-UMP2-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table: mysql.%,information_schema.%,performance_schema.%
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
Relay_Log_Space: 529
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 3b9bc7b3-d6a0-11e8-9ee1-000c29a816df
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
(2) [FH-UMP2]mysql 为主库
类似的,可以配置FH-UMP2上的mysql为主库
FH-UMP2
#mysql -p(123456) mysql> show master status; |
FH-UMP1
#mysql -p(123456) mysql> show slave status; mysql> stop slave; mysql> change master to master_host='192.168.1.184',master_user='root',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154; mysql> start slave; mysql> show slave statusG |
5. 设置开机自启动(两台都需要)
#vim /etc/init.d/boot.local添加
systemctl start mysql.service
1.2方案二:通过mysqldump备份脚本进行全量备份
1.2.1脚本思路:先通过mysqldump命令将mysql数据备份到一个文件里,双机做ssh秘钥认证(给出远端的密码即可),通过scp命令将备份文件远程发送给备机。写一个定时任务进行执行MySQL备份脚本。
1.2.2脚本如下:
#!/bin/sh
filename=`date '+%Y%m%d-%H%M%S'` 定义备份文件日期格式(变量)
filename="${filename}bak.sql" 备份文件按日期命名(变量)
mysqldump -h127.0.0.1 -P3306 -uroot -ppassword dbname > /bak/db/${filename} 备份命令
scp -P 195 /bak/db/${filename} root@xxx.xxx.xxx.xxx:/bak 远程推送命令
echo "success"
sh文件不要忘记使用 chmod +x backup.sh 进行授予可执行权限。
假设我们将sh文件存放与opt目录下,需要配置一下定时任务
编辑文件:vi /etc/crontab 设定每天凌晨4点执行
00 04 * * * root /bin/sh /opt/db/backup-database.sh 备份脚本的定时任务