文章目录
- Mysql 5.5 实现主从同步一主一从(图文详细教程)
- 1、主从同步是什么
- 2、主从同步有什么作用
- 3、实现原理
- 4、具体操作(需要3个线程执行)
- 5、资源准备
- 6、主节点(sql-master-125)搭建
- 1):主节点master常用参数介绍
- 2):修改主库(master)配置
- 3):创建用于同步的账号
- 4):查看主节点(master)节点状态
- 7、从节点(sql-slave-126)搭建
- 1):从节点(slave)参数介绍
- 2):修改从库(sql-slave-126)配置
- 3):执行执行链接主服务器命令
- 4):启动slave同步进程
- 5):查看状态(当Slave_IO_Running、Slave_SQL_Running)同为yes即为启动成功。
- 8、效果展示
- 1):查看主节点以及从节点状态
- 2):查询主节点(master)与从节点(slave)中同步的数据库信息、确认数据一致。
- 3):主节点(master)新增表数据、确认从节点(slave)是否准实时同步。
- 4):主节点(master)新建表、查看从节点(slave)数据库表状态;
- 5):若有不足之处、请多海涵。其它功能请自行测试....
Mysql 5.5 实现主从同步一主一从(图文详细教程)
1、主从同步是什么
- 1)主数据通常是指实时生产数据库。
- 2)从同步是在一个交换节点设立高精度的基准时钟,通过传输链路把 此基准时钟信号送到网中各个从节点,利用 此基准时钟信号送到网中各个从节点,利用 锁相环 技术吧本地时 钟频率锁定在基准时上,从而实现网内各节点之间的信号同步。 数据库 主从同步 , 是用来建立一个和主数据库完全样的环境, 是用来建立一个和主数据库完全样的环境称为从数据库。
2、主从同步有什么作用
- 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
- 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
- 读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。
3、实现原理
- 主数据库(master)有bin-log日志,记录了主库总所有的sql语句。在从数据库(slave)中把主库(master)的bin-log日志拉取过来、重新relay-log再次执行这些语句即可。
4、具体操作(需要3个线程执行)
- 1)bin-log输出线程:每当有slave连接到master的时候,master都会创建一个线程等待发现哪个bin-log内容到slave。
- 2)slave I/O线程: 当从库slave开启后,slave会创建一个I/O线程,会自动链接到master并请求主库发送bin-log里面更新的记录都slave上,从本地IO进程读取主库发送的bin-log内容并保存到本地。
- 3)slave的SQL线程:从库slave启动会新建一个sql线程、这个线程会读取slave I/O线程内容并写入到relay log 中更新事件并执行。
- 对于每一个主从复制的连接,都有三个线程。拥有多个slave 的master为每一个连接到master 的slave 创建一个bin-log 输出线程,每一个slave都有它自己的I/O 线程和SQL 线程。
5、资源准备
- 准备主从服务器(mysql 已安装)
- 主(sql-master-125)、ip:192.168.44.125
- 从(sql-slave-126)、ip:192.168.44.126
- 准备测试数据库(主从库必须要有)
CREATE DATABASE `task_db`;
USE `task_db`;
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
insert into `tb_user`(`id`,`name`) values (1,'刘一'),(2,'陈二'),(3,'张三'),(4,'李四'),(5,'王五');
- 虚拟机配置请参考:https://blog.csdn.net/weixin_44187730/article/details/85121157
- Mysql安装请参考:https://blog.csdn.net/weixin_44187730/article/details/85693563
6、主节点(sql-master-125)搭建
1):主节点master常用参数介绍
参数 |
描述 |
server-id=1 |
当前Mysql服务器标识 |
log-bin=mysql-bin |
控制master的是否开启binlog记录功能 |
expire_logs_days=7 |
删除多少天之前的bin-log日志 |
binlog-do-db=task_db |
指定数据库(举例 task_db库)的更新到二进制日志中 |
binlog-do-table=tb_user |
指定表(tb_user)的更新到二进制日志中 |
binlog-do-table=mysql |
指定不需要同步的数据库(举例 mysql库) |
max_binlog_size |
master的每个二进制日志文件的大小,默认1G、当日志文件到达1G会重新创建一个日志文件 |
log_slave_updates |
此参数控制slave数据库是否把从master接受到的log并在本slave执行的内容记录到slave的二进制日志中,在级联复制环境中(包括双master环境),这个参数是必须的 |
2):修改主库(master)配置
1、vim /etc/my.cnf
2、在对应位置添加如下内容:
[mysqld]
#server-id(不可重复)、log-bin该两项配置默认开启、请留意my.cnf文件
server-id=1
log-bin=mysql-bin
#演示用的的task_db、如有需要请按照实际修改
binlog-do-db=task_db
expire_logs_days=7
3、保存退出、并重启mysql服务、systemctl restart mysql
3):创建用于同步的账号
创建用户:allowsalve,密码为:147258,并授权。
GRANT REPLICATION SLAVE ON *.* TO 'allowsalve'@'192.168.44.%' IDENTIFIED BY '147258';
#刷新用户权限
flush privileges;
4):查看主节点(master)节点状态
show master status;
7、从节点(sql-slave-126)搭建
1):从节点(slave)参数介绍
参数 |
描述 |
server-id=1 |
当前Mysql服务器标识 |
log-bin=mysql-bin |
开启二进制bin-log日志 |
relay-log=relay-bin |
中继日志文件的路径名称 |
relay-log-index=relay-bin |
中继日志索引文件的路径名称 |
read_only=1 |
使数据库只读,可以保证slave只接受master的更新,而不接受client的更新。 |
skip_slave_start |
使slave在mysql启动时不启动复制进程,mysql起来之后使用 start slave启动,建议必须 |
replicate-do-db |
只复制指定数据库 |
replicate-do-table |
只复制指定表 |
replicate-ingore-table |
忽略指定表 |
max_relay_log_size |
slave上的relay log的大小,默认是1G |
relay_log_info_file |
中继日志状态信息文件的路径名称 |
relay_log_purge |
当relay log不被需要时就删除,默认是on |
log_slave_updates |
同master节点作用相同 |
2):修改从库(sql-slave-126)配置
1、vim /etc/my.cnf
2、在对应位置添加如下内容:
[mysqld]
#server-id(不可重复)、log-bin该两项配置默认开启、请留意my.cnf文件
server-id=2
log-bin=mysql-bin
#演示用的的task_db、如有需要请按照实际修改
replicate-do-db=task_db
read_only=1
3、保存退出并重启、systemctl restart mysql
3):执行执行链接主服务器命令
CHANGE MASTER TO
MASTER_HOST='192.168.44.125',
MASTER_USER='allowsalve',
MASTER_PASSWORD='147258',
MASTER_LOG_FILE='mysql-bin.000011',
MASTER_LOG_POS=247;
4):启动slave同步进程
start slave;
5):查看状态(当Slave_IO_Running、Slave_SQL_Running)同为yes即为启动成功。
show slave status\G;
slave启动成功:
8、效果展示
1):查看主节点以及从节点状态
show master status;
show slave status\G;
特别说明:主节点(master)的日志文件File与位置Position会持续发生变化、从节点(slave)在链接master的时候、第一次需要确认主节点(master)的File与Position,前文主节点的File为mysql-bin.00011、Position为247只是代表一个执行同步的切入点、请勿混淆。
2):查询主节点(master)与从节点(slave)中同步的数据库信息、确认数据一致。
use task_db;
show tables;
select * from tb_user;
3):主节点(master)新增表数据、确认从节点(slave)是否准实时同步。
insert into tb_user(name) values('赵六'),('孙七');
select * from tb_user;
同步成功:
4):主节点(master)新建表、查看从节点(slave)数据库表状态;
CREATE TABLE tb_dept(
id INT(4) PRIMARY KEY,
NAME VARCHAR(20)
);
show tables;
同步成功:
5):若有不足之处、请多海涵。其它功能请自行测试…