第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 status\G |
詳細信息如下:
mysql> show slave status\G
*************************** 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 status\G |
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 備份腳本的定時任務