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主主配置的主要内容,如果未能解决你的问题,请参考以下文章