一、mariadb主从同步
主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从架构来搭建
1.原理过程:
- master记录二进制日志。在每个事务更新数据完成之前,master在二进制日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
- slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
- SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
- 此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制–>复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。
2.mariadb主从配置
环境准备:
mariadb01:192.168.30.148
mariadb02:192.168.30.149
操作系统:CentOS-7-x86_64
数据库版本:Mariadb-10.3.7(数据库版本要一致)
主从关系:mariadb01为主,mariadb02为从
注意:
-
版本
(1)双方的MySQL版本要一致; (2)如果不一致:主的要低于从的;
-
从什么位置开始复制:
(1)都从0开始:两台新服务器,没有任何数据; (2)主服务器已经运行一段时间,并且存在不小的数据集:把主服务器备份,然后在从服务恢复,从主服务器上备份时所处的位置开始复制。
配置mariadb01:
1.修改配置文件
在[server]或[mysqld]下添加以下配置
server-id=1
log-bin=mysql-bin
2.重启mariadb服务
systemctl restart mariadb
3.创建主从连接账号与授权
4.查看主服务器数据库状态
配置mariadb02:
1.修改配置文件
vim /etc/my.cnf.d/server.cnf
同样的位置添加如下配置
server-id=2
2.重启服务
systemctl restart mariadb
3.登录数据库建立主从连接
MariaDB [(none)]> change master to master_host='192.168.30.148',
-> master_user='slave',
-> master_password='slave',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=765;
注意:
MASTER_LOG_FILE
MASTER_LOG_POS
此两项必须与master一致
4.启用复制线程
MariaDB [(none)]> start slave;
MariaDB [ryan]> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.30.148
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 550323
Relay_Log_File: c1-relay-bin.000002
Relay_Log_Pos: 550113
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 550323
Relay_Log_Space: 550419
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_S