MySQL主从复制
简介
-
使用MySQL主从复制,进行读写分离:随着访问量的增大,数据的吞吐量面临瓶颈,对于同一时刻有大量的读操作,但是写操作较少的场景,可以将数据库拆分为主库和从库,主库负责数据库的增删改操作,从库负责读查询操作,能够有效的避免由数据更新导致的行锁,使系统的查询性能得到很大的提升。
-
MySQL 是一个异步的复制过程,底层是基于mysql数据库自带的
binlog
功能,就是一台或多台数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制应用到自身,最终实现从库的数据和主库的数据保持一致。 -
MySQL主从复制是其自带功能,无需借助第三方工具。
-
MySQL 复制过程分为三步:
- master 将改变记录到
binlog
; - slave 将master的
binlog
拷贝到它的中继日志(relay log
); - slave 重做(
replay
)中继日志中的事件,将改变应用到自己的数据库中;
- master 将改变记录到
配置
-
配置主库(Master):master 会将改变记录到二进制日志
binary log
。-
修改主库的配置文件 vim /etc/my.cnf,[mysqld]下添加如下代码:
1
2log-bin=mysql-bin #启用二进制日志
server-id=100 #id作为服务器唯一标识,不一定要100,只要不重复即可 -
重启服务
1
systemctl restart mysql
-
登录到mysql
1
mysql -u root -p
-
创建一个用户叫
xiaoming
,密码是Root@123456
,并给该用户授予REPLICATION SLAVE
权限1
2create user xiaoming identified by 'Root@123456';
grant replication slave on *.* to xiaoming; -
查看主库状态
1
2
3
4
5
6
7mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 697 | | | |
+------------------+----------+--------------+------------------+-------------------+
# 日志名称 # 记录位置
-
-
配置从库(slave):slave 将master的
binary log
拷贝到它的中继日志relay log
。-
修改从库的配置文件 vim /etc/my.cnf,[mysqld]下添加如下代码:
1
server-id=101 #必须是唯一的id,不能重复
-
重启mysql服务
1
systemctl restart mysql
-
登录mysql
1
mysql -u root -p
-
执行语句
1
2
3mysql> change master to master_host='10.180.189.25',master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000001',master_log_pos=697,get_master_public_key=1;
mysql> start slave; -
查看从库状态
1
mysql> show slave status\G
-
若如下两个线程显示
Yes
则正常1
2Slave_IO_Running: Yes
Slave_SQL_Running: Yes
-
-
配置成功,此时如果master发生改变,slave会重做中继日志中的事件,将改变也应用到自身的数据库中;
评论