mysql主主配置

mysql主主配置

mysql双主(主主)架构方案思路

1.两台mysql都可读写,互为主备,默认只使用一台(msterA)负责数据写入,另一台(masterB)备用

2.masterA是masterB的主库,masterB又是masterA的主库,他们互为主从

3.两台主库之间做高可用,可以采用keepalived等方案(使用VIP对外提供服务)

4.所有提供服务的从服务器与masterB进行主从同步(双主多从)

5.建议采用高可用策略,masterA或masterB均不因宕机恢复后而抢占VIP(非抢占模式)

这样做可以在一定程度上保证主库的高可用,在一台主库down掉之后,可以在极短的时间内切换到另一台主库上(尽可能减少主库宕机对业务造成的影响),减少了主从同步给线上主库带来的压力;

但是也有几个不足的地方:

1.masterB可能会一直处于空闲状态(可以用它当从库,负责部分查询);

2.主库后面提供服务的从库要等masterB先同步完了数据后才能去masterB上去同步数据,这样可能会造成一定程度的同步延时;

 

部署环境:

主(masterA_mysql):192.168.87.100    centos 7

从(masterB_mysql):192.168.87.101     centos 7

vip:192.168.87.102

1、master服务器修改mysql配置文件,配置文件位置:/etc/my.cnf ,在文件中的 [mysql] 添加内容

[root@Aserver etc]# vi /etc/my.cnf
#主主备份配置
server-id=1        #任意自然数n,只要保证两台MySQL主机不重复。
log-bin=mysql-bin       #开启二进制日志
relay-log=mysql-relay-bin

auto_increment_increment=2   #步进值auto_imcrement。一般有n台主MySQL就填n
replicate-wild-ignore-table=mysql.%    #replicate-wild-ignore-table 代表不参与备份
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

 

2、slave服务器修改mysql配置文件,配置文件位置:/etc/my.cnf ,在文件中的 [mysql] 添加内容

[root@Bserver etc]# vi /etc/my.cnf
#主主备份配置
server-id=2        #任意自然数n,只要保证两台MySQL主机不重复。
log-bin=mysql-bin       #开启二进制日志
relay-log=mysql-relay-bin

auto_increment_increment=2   #步进值auto_imcrement。一般有n台主MySQL就填n
replicate-wild-ignore-table=mysql.%        #replicate-wild-ignore-table 代表不参与备份
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

配置完后重启mysq服务

注意:不要在主库上使用binlog-db 或binlog-ignore-db 也不要从库上使用replicte-do-db或者replicate-ignore-db,因为这样可能产生跨库更新失败,推荐从库上使用replicate_wild_do_table 和replicate-wild-ignore-table两个选项来解决负责过程过滤。

3、手动同步数据库

在执行主主互备前,需要将masterA 和masterB的数据库同步,首先在masterA上备份数据库

mysql>FLUSH TABLES WITH READ LOCK;

不退出终端,否则锁失效,重新开启以前终端,直接打包压缩数据库文件或使用mysqldump工具导出数据

[root@Aserver etc]#cd /var/lib/

[root@Aserver etc]# tar zcvf mysql.tar.gz mysql

[root@Aserver etc]#scp mysql.tar.gz root@192.168.87.101:/var/lib/          #选择yes  并输入密码

4、 创建复制用户并授权

在192.168.87.100中创建一个 可以从192.168.87.101登陆上来的用户并赋予权限

MariaDB [sampdb]> unlock tables;   #解除锁表
Query OK, 0 rows affected (0.00 sec)

MariaDB [sampdb]>GRANT REPLICATION SLAVE ON *.* TO ‘repl_nuser’@'192.168.1.101' IDENTIFIED BY ‘repl_passwd’;   #创建用户并设置权限

MariaDB [sampdb]l>FLUSH PRIVILEGES;  #刷新权限

5、在192.168.87.100上查看数据库二进制日志名和位置

mysql>show master status;

6、在192.168.87.101中执行

mysql>CHANGE MASTER TO

->MASTER_HOST='192.168.87.100',

->MASTER_USER='repl_user',

->MASTER_PASSWORD='repl_passwd',

->MASTER_LOG_FILE='mysql-bin.000002',

->MASTER_LOG_POS=418;

接着可以在masterB上启动从服务器了,

执行:mysql>start slave;

查看从服务器的运行状态:

show slave status \G;

 

完成192.168.87.101 对192.168.87.100备份

实现192.168.87.100对192.168.87.101的备份则

1、在192.168.87.101(masterB_mysql)创建192.168.87.100(masterA_mysql)能够访问的账户

MariaDB [sampdb]> grant replication slave on *.* to 'repl_user'@'192.168.87.100' identified by 'repl_password';

MariaDB [sampdb]> FLUSH PRIVILEGES;  #刷新权限
Query OK, 0 rows affected (0.00 sec)

2、查看master状态

3、在masterA_mysql的mysql库中将masterB_mysql 设置为主服务器

MariaDB [(none)]> change master to

master_host='192.168.87.101',

master_user='repl_zhengwei',

master_password='sky!zheng',

master_log_file='mysql-bin.000003',

master_log_pos=1331;
Query OK, 0 rows affected (0.06 sec)

4、接着执行

MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)

5查看状态

 

posted on 2018-09-06 23:44  ざ柒  阅读(231)  评论(0编辑  收藏  举报