mysql双主如何配置-kb88凯时官网登录

时间:2023-05-26
阅读:
免费资源网 - https://freexyz.cn/

前言

特点:在双主配置中,两台mysql互为主从节点。节点a和节点b互为主节点。

安装mysql步骤略过

一、mysql配置文件

(1)节点a配置

# 设置server-id,两节点必须不一样
server-id = 100
 
 
# 开启bin_log,模式为row,允许最大日志为1g
log_bin = mysql-bin
binlog_format = row
max_binlog_size = 1024m
 
 
# mysql5.7的版本不需要配置log-slave-updates=1
# log-slave-updates = 1
 
 
# 实现数据库宕机恢复后,自动同步缺少的数据
relay_log = mysql-relay-bin
 
 
# 设置自增id初始值为2,每次自增量为2。即都是偶数2,4,6,8,...
auto_increment_offset = 2
auto_increment_increment = 2
 
 
# 开启gtid
gtid_mode = on
enforce_gtid_consistency = 1
 
 
# 忽略不需要同步的schema
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = sys

(2)节点b配置

只列出了与节点a不同的配置

# 设置server-id,两节点必须不一样
server-id = 200
 
# 设置自增id初始值为1,每次自增量为2。即都是奇数1,3,5,7,...
auto_increment_offset = 1
auto_increment_increment = 2

二、配置节点a为节点b的master(主从模式)

节点a为master,节点b为slave。

(1)登录节点a,创建slave(节点b)使用的账号。

# 在节点a上创建账号repl_user,允许从任意ip访问,密码为slave@100,
grant replication slave on *.* to 'repl_user'@'%' identified by 'slave@100';
flush privileges;

(2)查看节点a的master信息

如下图所属,节点a的bin_log日志为mysql-bin.000001,位置是154

# 清空master信息。初次配置可以使用,若已运行了同步,切记不要使用!
reset master;
 
# 查看master信息
show master status;
 
 ------------------ ---------- -------------- ------------------ --------------------------------------------- 
| file             | position | binlog_do_db | binlog_ignore_db | executed_gtid_set                           |
 ------------------ ---------- -------------- ------------------ --------------------------------------------- 
| mysql-bin.000001 |     154 |              |                  | c2cf218e-2317-11ec-a36f-5cf9dd4fd6a8:1-5    |
 ------------------ ---------- -------------- ------------------ --------------------------------------------- 

(3)登录节点b,设置节点b的master为节点a

# 停止节点b上的slave
stop slave;
 
# 将节点b的master设为节点a,以下的配置信息均表示节点a
# master_log_file和master_log_pos,是在第(2)步中查看节点a的master信息
change master to 
       master_host='127.0.0.1', 
       master_port=3307,
       master_user='repl_user', 
       master_password='slave@100', 
       master_log_file='mysql-bin.000001', 
       master_log_pos=154;
 
# 开启节点b上的slave
start slave;

(4)确认节点b的slave是否运行成功。当返回的结果中,slave_io_running和slave_sql_running都为yes时,表示成功。如果为no或connecting时,请在mysql的data目录中查看.err结尾的日志文件,找出[error]级别的日志查看。通常,初次配置问题主要由my.ini配置或同步账号创建问题引起。

# 在节点b中查看slave状态
show slave status\g;
 
*************************** 1. row ***************************
              slave_io_state: waiting for master to send event
                  master_host: 127.0.0.1
                  master_user: repl_user
                  master_port: 3307
                connect_retry: 60
              master_log_file: mysql-bin.000001
          read_master_log_pos: 2207
               relay_log_file: mysql-relay-bin.000002
                relay_log_pos: 1143
        relay_master_log_file: mysql-bin.000001
             slave_io_running: yes
            slave_sql_running: yes
                           ......

(5)若slave配置出现异常,可使用以下语句重置

reset slave all;

三、完成双主配置

此时,已成功配置了节点a与节点b的主从模式,即节点a是节点b的master。接下来重复步骤三的操作,但是节点a、b的操作要颠倒过来,即在节点b上创建同步账号,查看master信息,在节点a上设置节点b为master。配置完成后,同样查看节点a的slave状态,slave_io_running和slave_sql_running是否都为yes。

四、测试

在节点a添加、删除schema或表或数据,在节点b中查看是否有正确同步。

测试在节点a和节点b上,添加的自增主键数据是否与配置文件相符。一个为奇数,一个为偶数。增加或删除数据,主键是否会出现冲突的情况。

五、控制同步的库或表

通过修改my.ini实现

(1)在master端控制

binlog-do-db binlog日志记录的数据库(多数据库用,隔开)

binlog-ignore-db binlog日志中忽略数据库(多数据库用,隔开)

只有在binlog中记录的表,才能同步给从库

# binlog中记录这两个表
binlog-do-db=db_1,db_2      
 
# binlog中不记录这两个表 
binlog-ignore-db=db_3,db_4

(2)在slave端控制

replicate-do-db 设定需要复制的数据库
replicate-ignore-db 设定需要忽略的复制数据库
replicate-do-table 设定需要复制的表
replicate-ignore-table 设定需要忽略的复制表
replicate-wild-do-table 同replication-do-table功能一样,可以通配符
replicate-wild-ignore-table 同replication-ignore-table功能一样,可以加通配符

注:忽略的配置里,在从库的relaylog中仍有信息,只是没有执行同步。

# 执行同步的库
replicate-do-db=db_1
replicate-do-db=db_2
 
# 忽略同步的库
replicate-ignore-db=db_3
 
# 执行同步的表
replicate-do-table=db_1.table_a
replicate-do-table=db_2.table_b
 
# 忽略同步的表
replicate-ignore-table=db_2.table_c
 
# 只复制哪个库的哪个表
replicate-wild-do-table=db_4.% 
 
# 忽略哪个库的哪个表
replicate-wild-ignore-table=mysql.%

六、一个账号多个ip

当一台mysql作为主节点,n台作为从节点时,如果每个从节点都添加一个账号会非常繁琐。可以在主节点中创建一个账户,并将多个ip地址与此账户相关联,以减少需要添加的账户数目。

具体做法是,将创建账号的语句执行多次,每次的ip不同即可。

# 创建一个账号名,为此账号设置多个ip
grant replication slave on *.* to 'repl_user'@'192.168.5.10' identified by 'slave@100';
grant replication slave on *.* to 'repl_user'@'192.168.5.20' identified by 'slave@100';
flush privileges

以上就是mysql双主如何配置的详细内容。

免费资源网 - https://freexyz.cn/
返回顶部
顶部
网站地图