MySQL異地備份方案


第1章 Mysql異地備份方案

1.1 方案一:主主復制進行熱備份

1.1.1主主復制原理:雙機熱備就是通過搭建主主復制架構進行互相同步,從而保證兩邊的數據庫一致。

1.1.2主主復制做異地備份的好處:

  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]
server-id=2

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                     備份腳本的定時任務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM