MySQL
主从复制
1. 概念
MySQL
主从复制是指一种数据库复制机制,其中一个数据库实例(主库)将其数据更改复制到一个或多个其他数据库实例(从库)。这是一种常见的数据库架构,用于提高可用性和性能。
-
主库:数据的写入点,处理所有的写入请求。
-
从库:只从主库接收数据的复制,不处理写入请求,通常用于负载平衡和数据备份。
2. 原理
step1
二进制日志(Bin_Log):
主库将所有的写入操作(如 INSERT、UPDATE、DELETE)记录到二进制日志。
step2
复制线程(I/O线程):
从库通过网络连接到主库,读取主库的二进制日志,并将这些操作应用到自己的数据库中。
step3
执行线程(SQL线程):
从库解析和执行来自主库的二进制日志内容,进行数据同步。
3. 配置replication
3.1 准备环境
主从库两台服务器均需做好以下准备:
1、关闭防火墙和selinux
2、固定IP
3、修改主机名并配置主机名解析
hostnamectl set-hostname master #主库master
hostnamectl set-hostname slave #从库slave
cat >>/etc/hosts<<EOF
192.168.22.123 master
192.168.22.124 slave
EOF
#两台服务器均需配置主机名解析
4、安装MySQL
实例
3.2 配置主库
step1
开启二进制日志
cat >>/etc/my.cnf<<EOF
log_bin=/var/lib/mysql/mysql-binlog
server_id=1
EOF
systemctl restart mysqld
step2
授权账号
登录MySQL数据库
grant replication slave on *.* to 'account'@'%' identified by "password";
flush privileges;
#account 账号名称,可以自行设置,但在从库必须配置对应的账号名称
#password 账号密码
#% 所有IP,可以指定从库IP或所在网段192.168.22.%
step3
查看二进制文件名称及位置点
mysql> show master status;
+---------------------+----------+--------------+------------------+-------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |Executed_Gtid|
+---------------------+----------+--------------+------------------+-------------+
| mysql-binlog.000004 | 154 | | | |
+---------------------+----------+--------------+------------------+-------------+
3.2 配置从库
step1
修改配置文件
cat >>/etc/my.cnf<<EOF
server_id=2
EOF
systemctl restart mysqld
#从库的server_id一定不能与主库相等,一主多从时每个库的server_id也要区分开来
step2
配置主从
登录MySQL数据库
CHANGE MASTER TO
MASTER_HOST='master',
MASTER_USER='account',
MASTER_PASSWORD='password',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-binlog.000004',
MASTER_LOG_POS=154,
MASTER_CONNECT_RETRY=10;
#account和password写在主库授权的账号和密码
#mysql-binlog.000004和154写在主库查看到的二进制文件名称及位置点
step3
启动并查看状态
mysql>start slave; #启动主从复制
mysql> show slave status\G #查看状态
#主要关注以下内容,IO线程和SQL线程运行状态yes,并且无错误码时,代表主从复制配置成功
Slave_IO_Running: Yes IO线程运行状态
Slave_SQL_Running: Yes SQL线程运行状态
Last_Errno: 0 最后的错误码
Last_Error: 上次错误
Seconds_Behind_Master: 0 主从复制延迟时间
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
从服务器已读取所有中继日志;正在等待更多更新
4. 生产环境配置主从复制
当主库正在运行并且已经有数据时,如何配置主从。
step1
主库授权账号,配置主机名解析,修改配置文件,kill -1重新加载配置文件
step2
主库开启读锁,停止写入数据,可配置消息队列RabbitMQ、Apache Kafka、Redis、ActiveMQ等暂时储存写入信息。
step3
使用逻辑备份或物理备份备份主库已有的数据,并将其加载到从库中,让主库与从库内容保持一致。
step4
从库配置开启主从复制,关闭主库读锁,开始同步。