MYSQL单双向同步

 
Master:192.168.1.101
Slave  :192.168.1.102
单向同步(一)
  1. 进入Master启动MYSQL
        
        
        
        
    1. [root@localhost ~]# service mysqld start  
    2. Starting MySQL                                             [  OK  ] 
  2.  进入Mysql命令行模行
        
        
        
        
    1. [root@localhost ~]# mysql -uroot -p  
    2. Enter password:   
    3. Welcome to the MySQL monitor.  Commands end with ; or \g.  
    4. Your MySQL connection id is 9 to server version: 5.0.22-log  
    5.  
    6. Type 'help;' or '\h' for help. Type '\c' to clear the buffer.  
    7.  
    8. mysql>  
  3. 为slave用户添加同步专用权限
        
        
        
        
    1. mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO  'replication'@'192.168.1.102' identified by '123456';  
    2. Query OK, 0 rows affected (0.01 sec)  
    3.  
    4. mysql> Flush privileges;  
    5. Query OK, 0 rows affected (0.00 sec) 
  4. 创建更新日志文件
        
        
        
        
    1. mkdir /var/log/mysql  
    2. chmod -R 775 /var/log/mysql  
    3. chown -R mysql:mysql /var/log/mysql 
  5. 配置/etc/my.conf
     
    log-bin=mysql-bin 启用二制日志系统
    server-id=1 ID  标示为主,master_id必须为1到232�C1之间的一个正整数值
    binlog-ignore-db=mysql,test 设置需要忽略同步数据库
    binlog-do-db=skydb or name.table 设置需要同步的数据库或同步的表,如果多个库,每个库增加一行.
    log-bin=/var/log/mysql/updatelog 设置log日志文件名
  6. 本导入数据库
        
        
        
        
    1. service mysqld stop  
    2.  
    3. cd /var/lib/mysql  tar -jxf skydb.tar.bz2    
    4.  
    5. #如果需要冷copy 那么直接把数据完程复制到SLAVE上(可选)   
    6. scp skydb.tar.bz2 [email protected]:/var/lib/mysql  
    7.  
    8. service mysqld start 
  7. 配置SLAVE /etc/my.cnf
     
    server-id = 2 Master 与Slave的不能相同
    master-host = 192.168.1.101 指定MASTER地址
    master-user = replication 同步用户名
    master-password = 123456 同步密码
    master-port = 3306 同步端口
    master-connect-retry=60 断开重新连接等待时间
    replicate-ignore-db=mysql 屏蔽需要同步数据库
    replicate-do-db= skydb
    relay-log=slave-relay-bin
    同步数据库
    生成日志文件
     
 
 
 
    
 
 
 
    8.解压MYSQL数据库(可选 )
  
  
  
  
  1. cd /var/lib/mysql  
  2. tar -jxf sky.tar.bz2 
    9.配置SLAVE二进制数据库记录回归,达到同步
  
  
  
  
  1. [root@localhost ~]# mysql -uroot -p  
  2. Enter password:   
  3. Welcome to the MySQL monitor.  Commands end with ; or \g.  
  4. Your MySQL connection id is 4 to server version: 5.0.22-log  
  5.  
  6. Type 'help;' or '\h' for help. Type '\c' to clear the buffer.  
  7.  
  8. mysql> slave stop;  
  9. Query OK, 0 rows affected (0.00 sec)  
  10.  
  11. mysql> show master status; #这句是在MASTER服务器里面执行  
  12. +------------------+----------+--------------+------------------+  
  13. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |  
  14. +------------------+----------+--------------+------------------+  
  15. updatelog.000004 |       98 |              |                  |   
  16. +------------------+----------+--------------+------------------+  
  17. 1 row in set (0.00 sec)  
  18.  
  19. mysql> CHANGE MASTER TO MASTER_LOG_FILE='updatelog.000004',MASTER_LOG_POS=98;  
  20. Query OK, 0 rows affected (0.01 sec)  
  21.  
  22. mysql> slave start;  
  23. Query OK, 0 rows affected (0.00 sec) 
    10.如果出现mysql> slave start; ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO
  
  
  
  
  1. change master to master_host='192.168.1.101'master_user='replication'master_password='123456',master_log_file='updatelog.000001'master_log_pos=98
     11.检查是配置成功
  
  
  
  
  1. show slave status\G  
  2. Slave_IO_Running: YES  
  3. Slave_SQL_Running: YES 
 
 
配置同步(二)
    1.修改原有SLAVE的my.cnf
server-id = 2    不要和主 ID 相同
master-host = 192.168.1.101  指定主服务器 IP 地址
master-user = replication  制定在主服务器上可以进行同步的用户名
master-password = 123456    密码
 
master-port = 3306   同步所用的端口
 
master-connect-retry=60     断点重新连接时间
 
replicate-ignore-db=mysql    屏蔽对 mysql 库的同步
replicate-do-db=skydb 同步数据库名称
 
relay-log=slave-relay-bin 启用日志
log-bin=/var/log/mysql/updatelog    设定生成log文件名
binlog-do-db=db1       设置同步数据库名
binlog-ignore-db=mysql      避免同步mysql用户配置
auto_increment_offset  =  2   
auto_increment_increment  =  2  
双向同步必免建值冲突

  
                
                                                   
                   
                   
        
        
   
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1:解决两个mysql数据库双向同步的键值冲突问题
  
  
  
  
  1. 出现的问题(多主自增长ID重复)   
  2. 1:首先我们通过A,B的test表结构   
  3. 2:掉A,在B上对数据表test(存在自增长ID)执行插入操作,返回插入ID为1   
  4. 3:后停掉B,在A上对数据表test(存在自增长ID)执行插入操作,返回的插入ID也是1   
  5. 4:然后 我们同时启动A,B,就会出现主键ID重复  
  6.  
  7. 解决方法:   
  8. 我们只要保证两台服务器上插入的自增长数据不同就可以了   
  9. 如:A查奇数ID,B插偶数ID,当然如果服务器多的话,你可以定义算法,只要不同就可以了  
  10.  
  11. 在这里我们在A,B上加入参数,以实现奇偶插入  
  12.  
  13. A:my.cnf上加入参数  
  14.  
  15. auto_increment_offset = 1   
  16. auto_increment_increment = 2   
  17. 这样A的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID了  
  18.  
  19. B:my.cnf上加入参数  
  20.  
  21. auto_increment_offset = 2   
  22. auto_increment_increment = 2   
  23. 这样B的auto_increment字段产生的数值是:2, 4, 6, 8, …等偶数ID了  
  24.  
  25. 可以看出,你的auto_increment字段在不同的服务器之间绝对不会重复,所以Master-Master结构就没有任何问题了。当然,你还可以使用3台,4台,或者N台服务器,只要保证auto_increment_increment = N 再设置一下auto_increment_offset为适当的初始值就可以了,那样,我们的MySQL可以同时有几十台主服务器,而不会出现自增长ID 重复。  
  26.  

本文出自 “Newbie's World” 博客,转载请与作者联系!

你可能感兴趣的:(mysql,数据库,职场,休闲,单双向同步)