mysql 主从同步复制

               mysql 主从同步复制


推荐阅读下面的这个文章:

http://blog.chinaunix.net/uid-20639775-id-3254611.html


下面是摘自上面连接的一个mysql 复制原理:

大致描述一下过程:从服务器的IO线程从主服务器获取二进制日志,并在本地保存为中继日志,然后通过SQL线程来在从上执行中继日志中的内容,从而使从库和主库保持一致。主从同步的详细过程如下:

1.主服务器验证连接。

2.主服务器为从服务器开启一个线程。

3.从服务器将主服务器日志的偏移位告诉主服务器。

4.主服务器检查该值是否小于当前二进制日志偏移位。

5.如果小于,则通知从服务器来取数据。

6.从服务器持续从主服务器取数据,直至取完,这时,从服务器线程进入睡眠,主服务器线程同时进入睡眠。

7.当主服务器有更新时,主服务器线程被激活,并将二进制日志推送给从服务器,并通知从服务器线程进入工作状态。

8.从服务器SQL线程执行二进制日志,随后进入睡眠状态。


#环境介绍:

            eth0                  eth1
master:   10.0.10.9              172.16.11.209
slave;   10.0.10.10             172.16.11.210


#同步数据库里面的bbs,blog,dedecms,并且以上几个库都运行一段时间了,存在数据,要增加slave。


#master端配置:

1 #修改my.cnf配置文件(增加下面的内容):


server-id = 1                           # master端ID号
log-bin=/usr/local/mysql/mysql-bin      #日志路径及文件名
binlog-do-db=bbs                        #同步bbs,blog,dedecms,此处关闭的话,就是除了不允许的,其它的库均同步
binlog-do-db=blog                       #没有“binlog-do-db” 这个选项的话,除了下面的不同步的库其他都同步
binlog-do-db=dedecms     
                                                                                                                                                                                                                                                                                       
binlog-ignore-db = mysql                #不进行mysql同步的库,以下同上
binlog-ignore-db = test
binlog-ignore-db = information_schema


2 #创建同步账号:

/usr/local/mysql/bin/mysql -u root -p123456
GRANT REPLICATION SLAVE,FILE ON *.* TO ‘replication‘@‘10.0.10.%‘ IDENTIFIED BY ‘123456‘;
flush privileges;


3 #锁表查看pos值和binlog日志名称:

提醒:这里要特别的记录一下内容:pos值  binlog 名称   后面要用到最好txt 记录一下

  flush tables with read lock;
  show master status;
mysql> show master status;
+------------------+----------+--------------+-------------------------------------------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                                            | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------------------------+-------------------+
| mysql-bin.000006 |     1151 |              | mysql,test,information_schema,mysql,test,information_schema |                   |
+------------------+----------+--------------+-------------------------------------------------------------+-------------------+
1 row in set (0.00 sec)


4 #备份文件(一下是2种方法,任选这里用了第一种):



1) 保存的是sql文件:
   /usr/local/mysql/bin/mysqldump -u root -p --all-databases > all.sql
   scp all.sql 10.0.10.10:/mnt/
2) 将要同步的库打包发到slave上:
   tar -zcvf
   scp all.sql 10.0.10.10:/mnt/


5 #解开表的锁:

/usr/local/mysql/bin/mysql -u root -p123456 -e "unlock tables;"


###slave 端配置:


1 #修改my.cnf

server_id = 2
binlog-do-db=bbs          #同步bbs,blog,dedecms,此处关闭的话,就是除了不允许的,其它的库均同步
binlog-do-db=blog         #没有“binlog-do-db” 这个选项的话,除了下面的不同步的库其他都同步
binlog-do-db=dedecms     
binlog-ignore-db = mysql   #不进行mysql同步的库,以下同上
binlog-ignore-db = test
binlog-ignore-db = information_schema


2 #恢复数据库:

/usr/local/mysql/bin/mysql -u root -p </mnt/all.sql


3 #操作数据库接续:

stop slave;
change master to master_host=‘10.0.10.9‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000006‘,master_log_pos=1151;
start slave;


4 # 确认主从同步的成功:

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.0.10.9
                  Master_User: replication
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos: 1449
               Relay_Log_File: slave-relay-bin.000002
                Relay_Log_Pos: 581
        Relay_Master_Log_File: mysql-bin.000006
             Slave_IO_Running: Yes                              # yes 即正常
            Slave_SQL_Running: Yes                              # YES 即正常
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1449
              Relay_Log_Space: 754
              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: 050bf314-81bf-11e3-90e9-000c29655eba
             Master_Info_File: /data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           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
1 row in set (0.00 sec)
mysql>


5 ##验证mysql 同步是否成功或者在设置要同步的库里面创建一张表(上面在my.cnf里限制同步的库了,所以只能创建表来测试,如果想测试全库同步把 小贴士里面的内容在主从去掉重启mysql即可)。


1) 主上新创建一个新库
2) 从上验证是否同步正常



小贴士:


# 实现所有的库同步(即:包括mysql,test,bbs......):
在my.cnf里面取消这些即可:
binlog-do-db=bbs                        #同步bbs,blog,dedecms,此处关闭的话,就是除了不允许的,其它的库均同步
binlog-do-db=blog                       #没有“binlog-do-db” 这个选项的话,除了下面的不同步的库其他都同步
binlog-do-db=dedecms     
                                                                                      
binlog-ignore-db = mysql                #不进行mysql同步的库,以下同上
binlog-ignore-db = test
binlog-ignore-db = information_schema










本文出自 “振兴的空间” 博客,请务必保留此出处http://renzhenxing.blog.51cto.com/728846/1359398

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。