mysql主主复制

-1 主主复制读分担50%,写无法分担

-2 配置方法

--1 服务器1号(192.168.1.1)配置完,重启mysql

1   [mysql]

2   server-id=1

3   log-bin=mysql-bin

4   auto-increment-increment=2 

5   auto-increment-offset=1

6   sync-binlog=1

7   innodb-flush-logs-at-trx-commit=1

8   replication-ignore-db=mysql

 

--2 服务器2号(192.168.1.2)配置完,重启mysql

1   [mysql]

2   server-id=1

3   log-bin=mysql-bin

4   auto-increment-increment=2 

5   auto-increment-offset=2

6   sync-binlog=1

7   innodb-flush-logs-at-trx-commit=1

8   replication-ignore-db=mysql

 

auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2

auto-increment-offset的值用来设定数据库中自动增长的起点的,因为这两台服务器都设定了一次同一个自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突

--3 服务器1号备份当前数据并记录备份前一刻的bin日志位置(--lock-all-tables自缩/解表,--master-data=2加入bin日志位置,方便一会查看,这里假设1号当前日志是mysql-bin.000004;位置是300)

 ---1 备份服务器1号当前数据

1    mysqldump --all-databases --lock-all-tables --master-data=2 > /tmp/mysql1.sql

2 

3    scp /tmp/mysql1.sql root@192.168.1.2:/tmp/

 ---2 创建授权账号

    ----1 服务器1号授权给服务器2号      

1   mysql -uroot

2   >GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'REPL1'@'192.168.1.1' IDENTIFIED BY '123456';

    ----2 服务器2号授权给服务器1号

1   mysql -uroot

2   >GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'REPL2'@'192.168.1.2' IDENTIFIED BY '123456';

 

--4 服务器2号导入1号数据,保证1/2号数据库一致性,记录此时2号日志位置(这里假设2号日志是mysql-bin.000001;位置是100);添加1号日志位置,并开启2号slave;

   同时服务器1号添加2号日志位置,并开启1号slave;

  ---1 服务器2号

 1     mysql -uroot -ppassword < /tmp/mysql1.sql

 2     mysql -uroot

 3 

 4     >FLUSH TABLES WITH READ LOCK;

 5 

 6     >SHOW MASTER STATUS\G

 7 

 8     >UNLOCK TABLES;

 9 

10     >CHANGE MASTER TO MASTER_HOST='192.168.1.1',MASTER_USER='REPL1',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql_bin.000004' \

11 

12      MASTER_LOG_POS='300';

13 

14     >START SLAVE;

  ---2 服务器1号

1     mysql -uroot

2 

3     >CHANGE MASTER TO MASTER_HOST='192.168.1.2',MASTER_USER='PERL2',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql_bin-00001' \

4 

5      MASTER_LOG_POS='100';

6 

7     >START SLAVE;

 

关于FLUSH TABLES WITH READ LOCK

-1 进入mysql会话使用此命令时一定不能退出会话,如果退出会话,所有表会自动解锁

-2 使用flush tables with read lock后再用mysqldump导出数据库脚本会遇到“Toomany connections”的错误,此时在my.cnf中添加“max_connections=500”以及”max_packet=32M”的选项

 
 binlog-format?
 

你可能感兴趣的:(mysql)