1 主从复制介绍
在 MySQL
集群环境中,可以分为 主节点
与 从节点
,通过主从复制可以实现 数据备份
、故障转移
、MySQL集群
、高可用
、读写分离
等。
2 主从复制原理
MySQL
的主从复制是 MySQL
本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是 copy
文件来实现的,而是借助 binlog
日志文件里面的 SQL
命令实现的主从复制,可以理解为我在 Master
端执行了一条 SQL
命令,那么在 Salve
端同样会执行一遍,从而达到主从复制的效果。
从库生成两个线程,一个 I/O
线程,一个 SQL
线程。
I/O
线程:去请求主库的binlog
,并将得到的binlog
日志写到relay log
(中继日志) 文件中;主库会生成一个log dump
线程,用来给从库I/O
线程传binlog
;SQL
线程:会读取relay log
文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。
重点:
MySQL 主从复制
:是 MySQL 本身自带的功能MyCat
:主要是做读写分离的,和Nginx
非常相似
主从说明:
- 主:会将
dmlsql
语句写入到二进制文件中(binLog
) - 从:
SQL 线程
的作用:就是在IO 线程
获取到的二进制执行文件之后,通过SQL 线程
进行执行二进制执行文件
3 MySQL
主从复制配置
3.1 主服务器节点
1、修改
MySQL
配置文件,新增以下内容:
vi /etc/my.cnf
server_id=101
log-bin=mysql-bin
server_id=101
:服务器idlog-bin=mysql-bin
:开启日志文件
2、重启
mysql
服务:
service mysqld restart
3、验证是否已经配置成功:
show variables like '%server_id%';
能够查询对应配置文件中的 server_id
说明已经配置成功。
4、查看二进制执行文件:
show master status;
能够看到同步的文件和行数,说明已经配置成功。
3.2 从服务器节点
1、修改
MySQL
配置文件,新增以下内容:
vi /etc/my.cnf
server_id=102
log-bin=mysql-bin
binlog_do_db=test
server_id=101
:服务器idlog-bin=mysql-bin
:开启日志文件binlog_do_db=test
:同步test
数据库,多数据库使用,
分隔
2、重启
mysql
服务:
service mysqld restart
3、验证是否已经配置成功:
show variables like '%server_id%';
能够查询对应配置文件中的 server_id
说明已经配置成功。
4、从服务器同步主服务器配置
change master to master_host='192.168.153.101',master_user='root',master_password='123456',
master_log_file='mysql-bin.000003',master_log_pos=120;
对应的参数需要在主节点查询:
5、开始同步
start slave
6、检查从服务器复制功能状态
SHOW SLAVE STATUS
如果是克隆机器会产生错误
Slave_IO_Running
为No
日志显示错误:
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
解决办法:
因为服务器克隆的时候 UUID
产生了重复 ,解决办法:
cat /etc/my.cnf
cd /var/lib/mysql
rm -rf auto.cnf
重启服务器即可:
service mysqld restart
3.3 测试
在主节点创建数据库:
从节点也会生出对应的数据库:
主节点数据库创建表
主节点表添加记录
问题:如果修改从节点的记录,会产生主从记录不一致的问题
这里就需要读写分离来实现从节点只能读