这里使用到了MySQL的分支MariaDB。 这里用到两台装有MySQL主机ip为192.168.52.5和192.168.52.6,两台服务器互为主从
借鉴了这位大佬的博客添加链接描述
- 修改两台服务器的mysql配置文件并重启服务,在[mysqld]下
vim /etc/my.cnf
[mysqld]
## 该mysql服务节点的唯一标识
server_id=5
## 开启bin-log日志
log_bin=mysql-bin
# 开启二进制日志
relay-log=relay-mysql
#开启中继日志
relay-log-index=relay-mysql.index
#设置为只读,这里关闭表示slave可读可写
log_slave_updates=on
#自增字段每次递增2
auto-increment-increment=2
#自增字段从1开始,避免id冲突 集群两台主机的起步要不同
auto-increment-offset=1
拓展 配置文件mysqld字段下添加
replicate-ignore-db=库名 #设定不需要同步的数据库
replicate-wild-ignore-table=库名.表名 #设定不需要同步某个库的某个表
#需要同步的二进制数据库名
binlog-do-db=testdemo
#只保留7天的二进制日志,以防磁盘被日志占满(可选)
expire-logs-days = 7
#如果salve库名称与master库名相同,使用本配置
replicate-do-db = testdemo
#如果master库名[testdemo]与salve库名[testdemo01]不同,使用以下配置[需要做映射]
#replicate-rewrite-db = testdemo -> testdemo01
#如果不是要全部同步[默认全部同步],则指定需要同步的表
#replicate-wild-do-table=testdemo.user
#replicate-wild-do-table=testdemo.demotable
重启MySQL服务
# 重启
systemctl restart mysql
# 查看启动状态
systemctl status mysql
- 分别在两台服务器创建MySQL同步账号
因为从库的IO线程需要建立与主库的TCP/IP连接用于将二进制日志复制到从库中继日志中。mysql要赋予一些特殊的权限给复制线程
#登录mysql服务
mysql -uroot -p123456
#主库建立对应的复制用户(仅限于访问主库对应的ip)
grant replication slave, replication client on *.* to 'userName'@'主库ip' identified by 'password';
# 保存权限
flush privileges;
这里是我配置的
grant replication slave, replication client on . to ‘slave’@‘192.168.52.6’ identified by ‘123456’;
grant replication slave, replication client on . to ‘slave’@‘192.168.52.5’ identified by ‘123456’;
- 这里可以清空两台主机的master和slave日志(若之前有开启过同步的,需要先停止同步:stop slave;)在mysql命令行中输入:
reset master;
reset slave;
- 查看主库mysql服务bin-log 开启状态,然后在从库执行change master to命令
show master status;
# 语法 从节点执行
change master to master_host='主库ip', master_user='用于复制的用户名', master_password='密码', master_port=master节点端口, master_log_file='主节点对应的binlog文件', master_log_pos=主节点对应的binlog文件偏移量;
#互为主从
#192.168.52.5上执行
change master to master_host='192.168.52.6', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=328;
#192.168.52.6上执行
change master to master_host='192.168.52.5', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=328;
- 启动从节点
# 启动从节点
START SLAVE;
- 查看备库状态
SHOW SLAVE STATUS \G;
- 如果两台Slave_IO_Running和Slave_SQL_Running都是Yes状态,代表互为主从配置成功
- 测试,使用客户端连接其中一个mysql服务在表中随便插入一条数据,另外一个mysql服务自动同步