mysql主主配置

Posted ざ柒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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查看状态

 

以上是关于mysql主主配置的主要内容,如果未能解决你的问题,请参考以下文章

mysql主主同步

mysql主主复制(双主复制)配置步骤

mysql配置主主脚本

转载-Mysql主主复制架构配置

MySQL主主主从从从配置文件

mysql主主配置