Mysql主从复制

目录

1:前言

        1.1:原文链接:(侵删)

        1.2:Mysql下载地址

        1.3:实现效果

        1.4:模拟资源

        1.5:主从复制步骤:

2:环境搭建

2.1:下载Mysql压缩包解压三份分别命名为Master_3307、Slave_3308、Slave_3309

2.2:修改主节点配置my-default.ini修改为my.ini。内容参考如下

2.3:修改从节点配置my-default.ini修改为my.ini。内容参考如下

2.4:初始化主节点

2.5:初始化从节点Slave_3308

2.6:初始化从节点Slave_3309

2.7:重启从节点

2.8:特别说明

3:主从复制

4:测试

        4.1:建表测试

        4.2:插入数据测试

        4.3:修改数据测试

        4.4:新增约束测试

        4.5:删除数据测试

        4.6:删表测试

        4.7:一主两从下,模拟Mysql_Slave2从节点挂掉后数据同步情况


1:前言

        1.1:原文链接:(侵删)

                https://blog.csdn.net/u014494148/article/details/126881544

        1.2:Mysql下载地址

                https://downloads.mysql.com/archives/community/

        1.3:实现效果

                从节点(slave,slave2)指定需同步的主节点(master)数据库,从节点重主节点中同步数

                据,即主节点表数据发生变化时从节点自动同步变化的数据。

        1.4:模拟资源

                一台电脑上安装两个Mysql服务来模拟主从复制(一主两从)。

        1.5:主从复制步骤:

                1.5.1:将Master的binary-log日志文件打开,mysql会把所有的DDL,DML,TCL写入

                           BinaryLog日志文件中。
                1.5.2:Master会生成一个 log dump 线程,用来给从库的 i/o线程传binlog。
                1.5.3:从库的i/o线程去请求主库的binlog,并将得到的binlog日志写到中继日志

                        (relaylog)中。
                1.5.4:从库的sql线程,会读取relaylog文件中的日志,并解析成具体操作,通过主从的

                           操作一致,而达到最终数据一致。

在这里插入图片描述

                1.5.5:读写分离架构

在这里插入图片描述

2:环境搭建

2.1:下载Mysql压缩包解压三份分别命名为Master_3307、Slave_3308、Slave_3309

2.2:修改主节点配置my-default.ini修改为my.ini。内容参考如下

[mysqld]
# 解决Mysql版本高低语法问题,参考:https://blog.csdn.net/lalala_dxf/article/details/125503160
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 指定主节点端口
port=3307 
# 指定主节点安装目录
basedir=D:\MYSQL\demo\master_3307
# 指定mysql数据库的数据的存放目录
datadir=D:\MYSQL\demo\master_3307\data
# 服务器id ,不可重复(因为电脑上以前还装了一台Mysql服务器所以此处的id我是重2开始的)
server-id=2
# 打开log-bin日志
log-bin=mysql-bin
# 要给从机同步的库,如果是多个库可以写多条命令(此处只同步student数据库)
binlog-do-db=student
# 不给从机同步的库(多个写多行)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
#自动清理 7 天前的log文件,可根据需要修改
expire_logs_days=7

2.3:修改从节点配置my-default.ini修改为my.ini。内容参考如下

[mysqld]
# 解决Mysql版本高低语法问题,参考:https://blog.csdn.net/lalala_dxf/article/details/125503160
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 不可以与主数据库的ID相同
server-id = 3
# 跳过出现的错误,继续执行复制(slave_skip_errors的值需要重主节点查询出来)
slave_skip_errors = 1146,2003 
# 从节点端口号
port=3308
# 从节点安装目录
basedir=D:/MYSQL/demo/slave_3308
# 从节点数据目录
datadir=D:/MYSQL/demo/slave_3308/data

2.4:初始化主节点

      2.4.1: 管理员身份运行命令提示符,进入主节点bin目录,执行“mysqld --initialize --console”命令完成主节点的初始化,初始化完成后会生成一个临时登录密码

        2.4.2:安装主节点服务执行“mysqld --install 服务名” 

        2.4.3:启动主节点服务执行“net start 服务名

  

        2.4.4:登录主节点执行“ mysql -u root -P3307 -p” 

 

        2.4.5:修改主节点root用户登录密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; 

2.5:初始化从节点Slave_3308

      步骤同 2.4.1 ~ 2.4.5

                需修改部分:

                        2.4.2 ~ 2.4.3 的服务名改为从节点的服务名(从节点服务名:Mysql_Slave)。

                        2.4.4 端口应改为从节点端口3308

2.6:初始化从节点Slave_3309

    步骤同 2.4.1 ~ 2.4.5

                需修改部分:

                        2.4.2 ~ 2.4.3 的服务名改为从节点的服务名(从节点服务名:Mysql_Slave2)。

                        2.4.4 端口应改为从节点端口3309

2.7:重启从节点

2.8:特别说明

        从节点data目录下有一个auto.cnf文件,该文件中会有一个UUID,因为从库采用的是复制主库,一定要保证主节点data目录下的auto.cnf与从节点data目录下的auto.cnf文件中的UUID不同,如果相同会导致从节点启动失败。

3:主从复制

主节点:

3.1:主节点和从节点分别新建student数据库(演示将主节点student库中的表数据复制到从节点中)

3.2:在主节点新建一个用户并授权用于主从节点数据同步

GRANT REPLICATION SLAVE ON *.* TO 'slaveuser'@'%' IDENTIFIED BY '密码';

FLUSH PRIVILEGES;

 若执行命令响应如下错误信息可参考:

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

解决链接:        

https://blog.csdn.net/lalala_dxf/article/details/125503160

3.3:查看主节点状态

show master status

说明:

        File:Master的log-bin日志文件

        Position:数据同步的位置

        Binlog_Do_DB:指定要同步的数据库

        Binlog_Ignore_DB:指定忽略的数据库

主节点至此所有的配置工作完成。

分别在从节点Mysql_Slave和Mysql_Slave2中与主节点建立链路:

        步骤3.4 ~ 3.7在从节点下的Mysql面板中执行

        3.4:停止链路

stop slave

        3.5:建立主从关系

change master to master_host='127.0.0.1',master_port=3307,master_user='slaveuser',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=8064;

-- 参数解释:
-- master_host:主节点IP 
-- master_port:主节点端口
-- master_user:主节点下新建用户专用于数据同步
-- master_password:新建用户密码
-- master_log_file:主节点log-bin日志文件(通过查询主节点show master status查询得来)
-- master_log_pos:主节点数据同步的位置(通过查询主节点show master status查询得来)

        3.6:启动链路

start slave

        3.7:查看从节点状态

show slave status

从节点Mysql_Slave:

 从节点Mysql_Slave2:

说明:

        Slave_IO_Running: YES(负责与主机的IO通信)

        Slave_SQL_Running: YES(负责自己的slave mysql进程)

Slave_IO_Running: NO的解决参考:

https://blog.csdn.net/qq_36756682/article/details/109647266

4:测试

        4.1:建表测试

主节点下新建表stu:

create table stu(
	id int(4),
	name varchar(20)
);

从节点已自动同步stu表:

        4.2:插入数据测试

主节点下新增一条数据:

INSERT INTO stu(id,name)
VALUES(1,'ZS')

 从节点已自动同步新增该数据:

        4.3:修改数据测试

主节点修改数据:

UPDATE stu SET name = 'ZS2' WHERE id = 1

 从节点已自动同步更新该数据:

        4.4:新增约束测试

主节点新增主键:

ALTER TABLE stu ADD PRIMARY KEY (id) 

从节点已自动同步该约束

        4.5:删除数据测试

主节点删除数据:

DELETE FROM stu WHERE id = 1 

从节点已自动同步删除该数据

        4.6:删表测试

主节点删除stu表

drop table stu

从节点已自动同步删除该表

        4.7:一主两从下,模拟Mysql_Slave2从节点挂掉后数据同步情况

                4.7.1:主节点新增一条记录

                4.7.2:两个从节点都已完全同步了此条新增记录

                4.7.3:关闭从节点Mysql_Slave2服务(net stop Mysql_Slave2 模拟故障)

                4.7.4:主节点再次新增一条数据

                4.7.5:从节点Mysql_Slave同步了此条新入数据

                4.7.6:重启从节点Mysql_Slave2服务(模拟故障恢复)

                4.7.7:主节点新增的第二条数据也同步到了从节点Mysql_Slave2

其它补充:

        卸载Windows服务命令:

                1:以管理员身份打开命令行

                2:sc delete 服务名

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值