mysql双机热备详解及延伸备份

开门见山,首先,主服务器的mysql版本不能高于从服务器的版本 ,可以是一样的,其次端口号必须统一。    好了,现在开始配置双机热备(随后将会提到循环备份以及互备)我使用的版本为redhat5.4两台ip为192.168.1.10、192.168.0.11,备份数据库为test。    热备中数据库分类:master主数据库、slave从数据库    一、两台mysql均可以在本地登录,并设定好密码,打开防火墙3306端口否则,无法进行通讯。

  1. vi /etc/sysconfig/iptables


  2. #在里面添加3306端口


  3. -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT


  4. :wq

  二、在主数据库中添加用于备份的账号


  1. mysql> GRANT REPLICATION SLAVE ON *.* #注意 这里是星号


  2.     ->TO"backupUser"@"IP" IDENTIFIED BY "password";

   backupUser填写建立的用户名,IP为从服务器IP,password就不用说了吧~

   三、修改主服务器的my.cnf在配置文件中添加


  1.     server-id=1 #数据库id,默认1




  2.     log-bin=log-bin #日志文件的名称,这里可以制定日志到别的目录 如果没有设置则默认主机名的一个日志名称




  3.     binlog-do-db=db_name #记录日志的数据库 ,可选




  4.     binlog-ignore-db=mysql #不记录日志的数据库 可选

log-bin是mysql产生的二进制日志,热备份就是读取二进制日志使数据得到时时同步,建议在binlog-ignore中添加mysql这个库,因为在我测试中这个库也被同步过来了,所以...你懂得

   四、重启服务器载入新配置文件

   进入数据库

  1. mysql -uroot -p


  2. password:

 锁定数据库
  1. mysql>FLUSH TABLES WITH READ LOCK;

 备份所需要的数据表
  1. mysqldump -uroot -ppassword test > /home/backup/mysql/test.sql


  2. #如果有多个就备份多个

锁定数据库是为了准备记录二进制日志的记录点,否则会在从机配置的时候不能正常读取二进制日志

查看在锁定数据库时二进制日志的记录点

  1. mysql>show master status;

  2. +----------------+----------+--------------+------------------+

  3. | File |Position| Binlog_Do_DB | Binlog_Ignore_DB |

  4. +----------------+----------+--------------+------------------+

  5. | bin_log.000001 | 805 |||

  6. +----------------+----------+--------------+------------------+

  7. 1 row inset(0.00 sec)

用笔记录二进制日志名称、以及pos点  bin-log.000001、805

解锁数据表


  1. mysql> UNLOCK TABLES;

下载备份sql然后上传到从机上去

   五、首先修改从机mysql配置文件


  1. vi /etc/my.cnf


  2. #添加代码


  3.     server-id=2 //设置数据库id,可以随便设置。但不能重复


  4.     master-host=192.168.1.10 //主服务器的IP地址或者域名


  5.     master-port=3306 //主数据库的端口号


  6.     master-user=backup //同步数据库的用户


  7.     master-password=********* //同步数据库的密码


  8.     master-connect-retry=60 //如果从服务器发现主服务器断掉,重新连接的时间差


  9.       master-retry-count = 999 //尝试连接次数

replicate-do-db=database      //表示同步的数据库如多个,请重复添加binlog-ignore-db=mysql   //不同步mysql数据库

   设定好上述参数后重启从机mysql

   六、进入从机mysql、停止slave(slave开机自动启动)

  1. mysql> slave stop;

   更新master信息(之前配置文件中是基础数据,此处是详细配置包括后期更改master信息也可以在mysql>中进行更新,但是端口变更要修改配置文件)
  1.    mysql> change master to               #进入修改master                                 -> master_host='192.168.1.10',         #定义master地址

  2.    -> master_user='backup',               #定义备份时使用的用户

  3.    -> master_password=’password‘,         #定义备份用户的密码

  4.    -> master_log_file='bin_log.000001',   #指定从机数据在master中的二进制日志名称            -> master_log_pos=805;                 #指定从机数据在master中的二进制日志记录点
    Query OK, 0 rows affected (0.01 sec)

更新完成,启动slave
  1. mysql> slave start;

查看slave的运行状态


  1. mysql>show slave status\G;

  2. *************************** 1. row ***************************

  3.               Slave_IO_State: Waiting for master to send event

  4.                  Master_Host: 192.168.38.7

  5.                  Master_User: backup

  6.                  Master_Port: 3306

  7.                Connect_Retry: 60

  8.              Master_Log_File: bin_log.000001

  9.          Read_Master_Log_Pos: 53229

  10.               Relay_Log_File: localhost-relay-bin.000002

  11.                Relay_Log_Pos: 52665

  12.        Relay_Master_Log_File: bin_log.000001

  13.             Slave_IO_Running: Yes                可以看到此处两个yes代表主从已经开始运行

  14.            Slave_SQL_Running: Yes                可以做个数据测试了

  15.              Replicate_Do_DB:

  16.          Replicate_Ignore_DB:

  17.           Replicate_Do_Table:

  18.       Replicate_Ignore_Table:

  19.      Replicate_Wild_Do_Table:

  20.  Replicate_Wild_Ignore_Table:

  21.                   Last_Errno: 0

  22.                   Last_Error:

  23.                 Skip_Counter: 0

  24.          Exec_Master_Log_Pos: 53229

  25.              Relay_Log_Space: 52824

  26.              Until_Condition: None

  27.               Until_Log_File:

  28.                Until_Log_Pos: 0

  29.           Master_SSL_Allowed: No

  30.           Master_SSL_CA_File:

  31.           Master_SSL_CA_Path:

  32.              Master_SSL_Cert:

  33.            Master_SSL_Cipher:

  34.               Master_SSL_Key:

  35.        Seconds_Behind_Master: 0

  36. Master_SSL_Verify_Server_Cert: No

  37.                Last_IO_Errno: 0

  38.                Last_IO_Error:

  39.               Last_SQL_Errno: 0

  40.               Last_SQL_Error:

  41. 1 row inset(0.00 sec)

IO和SQL均为yes则表示连同,那么可以去测试了,到此双机热备结束。

下面简单介绍双机互备与循环备份的原理

Mysql双机互备(在完成以上的基础不要做数据库进行操作,不要对主进行读写)

原理讲解:如果slave端按照上面配置文件中进行添加那么,默认不开启二进制日志(bin-log)那么他将不产生二进制日志,也就是说slave会一直读取master的二进制日志来更新自己。那么我们就要让slave自己也产生二进制日志。

在slave端的my.cnf添加“bin-log = ”,添加完以后我们可以重启从机然后用

mysql> show master status;  #查看slave端自己的master日志

然后再master的上面,进行master change to这个操作,信息都是填slave上的信息,master_log_pos是刚才查看的。

另外,如果在生产机中做双机互备,需要进行锁表,并提前做好备份,以防止数据的丢失。

在生产机当中,分两种情况

1:已经有了主从模式的情况,就需要先对主进行锁表,然后再修改slave的my.cof(添加日志功能),查看slave端的日志pos点(show master status;),然后再主上面做master change to 的操作  ,然后重启mysql即可

2:没有做主从模式的情况,第一步是先做主从,但是主的表在看完日志pos后不要解锁,一直锁着,直到从做好,然后在做从到主,最后在解锁。

适用于A↔B   A→B→C(此方法还需要自己测试,然后应用到生产机)


你可能感兴趣的:(mysql主从备份)