MariaDB主从复制
1. 环境
⾸先准备两台纯新的 CentOS7.6 服务器,其中 主机名为 master 的主服务器地址为 192.168.99.100 , 主机名为 slave-1 的从服务器地址为 192.168.99.10
master主节点 | 192.168.99.100 |
---|---|
slave从节点 | 192.168.99.10 |
master主服务器与slave从服务器使用yum安装MariaDB,关闭防火墙,关闭selinux,设置时间同步
2.配置master主节点
shell> vi /etc/my.cnf.d/server.cnf
# 启用二进制
log_bin
# 为当前节点设置一个全局唯一ID号
server_id=1
# 可选项,设置datadir中日志名称,确保不依赖主机名
log-basename = master1
2.1 检测
# 启动数据库
shell> systemctl restart mysqld
# 查看数据库接口是否启动
shell> ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 80 :::3306 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
2.2 创建有复制权限的mysql用户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.99.%' IDENTIFIED BY '123456';
2.3 查看二进制日志文件列表,及大小
mysql> show master logs
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| master1-bin.000001 | 533 |
+--------------------+-----------+
3.slave从节点配置
shell> vim /etc/my.cnf.d/server.cnf
[mysqld]
server_id = 2
# 设置数据库只读
read_only = ON
3.1 启动
shell> systemctl restart mysqld
3.2 配置复制线程
# 使用有复制权限的用户账号连接至主服务器,并启动复制线程
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.99.100',
MASTER_USER='repluser',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='master1-bin.000001',
MASTER_LOG_POS=533;
3.3 启动复制线程
mysql> start slave;
3.4 查看复制进程是否成功
shell> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.99.100
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master1-bin.000001
Read_Master_Log_Pos: 533
Relay_Log_File: slave-1-relay-bin.000002
Relay_Log_Pos: 557
Relay_Master_Log_File: master1-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
当Slave_IO_Running 和 Slave_SQL_Running 为yes时表示mysql主从复制成功
4.取消slave主从复制
# 先停止slave
mysql> stop slave;
# 清除所有从服务器上设置的主服务器同步信息
mysql> RESET SLAVE ALL;
5.MySQL复制注意事项
1.限制从服务器为只读
在从服务器上设置read_only=ON
注意:此限制对拥有SUPER权限的用户均无效
阻止所有用户, 包括主服务器复制的更新
mysql> FLUSH TABLES WITH READ LOCK;
2.RESET SLAVE :从服务器清除master.info ,relay-log.info, relay log ,开始新的relay log
RESET SLAVE ALL:清除所有从服务器上设置的主服务器同步信息,如PORT, HOST, USER和 PASSWORD 等
注意:以上都需要先STOP SLAVE
3.sql_slave_skip_counter = N 从服务器忽略几个主服务器的复制事件,global变量
4.如何保证主从复制的事务安全
参看https://mariadb.com/kb/en/library/server-system-variables/
在master节点启用参数:
sync_binlog=1 每次写后立即同步二进制日志到磁盘,性能差
如果用到的为InnoDB存储引擎:
innodb_flush_log_at_trx_commit=1 每次事务提交立即同步日志写磁盘
innodb_support_xa=ON 默认值,分布式事务MariaDB10.3.0废除
sync_master_info=# #次事件后master.info同步到磁盘
在slave节点启用服务器选项:
skip-slave-start=ON 不自动启动slave
在slave节点启用参数:
sync_relay_log=# #次写后同步relay log到磁盘
sync_relay_log_info=# #次事务后同步relay-log.info到磁盘