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 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                     备份脚本的定时任务

原文地址:https://www.cnblogs.com/A121/p/10471876.html