MySQL主从复制的用法
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章主要讲解了MySQL主从复制的用法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。简介MySQL 的主从复制又叫 Replication、AB 复制。至少需要两个
千家信息网最后更新 2025年02月23日MySQL主从复制的用法
这篇文章主要讲解了MySQL主从复制的用法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
简介
MySQL 的主从复制又叫 Replication、AB 复制。至少需要两个 MySQL 服务(可以是同一台机器,也可以是不同机器之间进行)。比如A服务器做主服务器,B服务器做从服务器,在A服务器上进行数据的更新,通过 binlog 日志记录同步到B服务器上,并重新执行同步过来的 binlog 数据,从而达到两台服务器数据一致。
MySQL 数据库的主从复制方案,与使用 scp/rsync 等命令进行的文件级别复制类似,都是数据的远程传输。
只不过 MySQL 的主从复制是其自带的功能,无需借助第三方工具,而且MySQL的主从复制并不是数据库磁盘上的文件直接拷贝,而是通过逻辑的 binlog 日志复制到要同步的服务器本地,然后由本地的线程读取日志里面的 SQL 语句,重新应用到 MySQL 数据库中。
作用
1. 可以实时灾备,用于故障切换;
2. 读写分离,提供查询服务,实现负载均衡;
3. 数据热备,避免影响业务。
原理
1、主服务器MySQL服务将所有的写操作记录在 binlog 日志中,并生成 log dump 线程,将 binlog 日志传给从服务器MySQL服务的 I/O 线程。2、从服务器MySQL服务生成两个线程,一个是 I/O 线程,另一个是 SQL 线程。
3、从库 I/O 线程去请求主库的 binlog 日志,并将 binlog 日志中的文件写入 relaylog(中继日志)中。
4、从库的 SQL 线程会读取 relaylog 中的内容,并解析成具体的操作,来实现主从的操作一致,达到最终两个数据库数据一致的目的。
注意点:- 主从复制是异步的逻辑的 SQL 语句级的复制;- 复制时,主库有一个 I/O 线程,从库有两个线程,及 I/O 和 SQL 线程;- 实现主从复制的必要条件是主库要开启记录 binlog 的功能;- 作为复制的所有 MySQL 节点的 server-id 都不能相同;- binlog 文件只记录对数据内容有更改的 SQL 语句,不记录任何查询语句。
形式
一主一从
主主复制
一主多从
多主一从(5.7后开始支持)
联级复制
实践
需求
实现一主一从复制模式,同一台主机两个MySQL实例
环境
Mac:10.15.1Docker:2.0.0.3//采取docker安装MySQL主要是管理维护方便、独立IP、启动秒级MySQL-master:5.7.29//主服务器MySQL-master IP:172.17.0.3MySQL-slave:5.7.29//从服务器MySQL-slave IP:172.17.0.4
步骤
第一步:准备好两台MySQL服务器
mysql-master(主服务器):
1. 创建目录结构:master/conf、master/data、master/logs2. 启动运行实例容器:docker run --name mysql-master> -p 3310:3306> -v ~/docker/master/conf:/etc/mysql/conf.d> -v ~/docker/master/data:/var/lib/mysql> -v ~/docker/master/logs:/var/log/mysql> -e MYSQL_ROOT_PASSWORD=123456> -d mysql:5.73. 进入容器docker exec -it mysql-master bash4. 登录MySQLmysql -uroot -p
mysql-slave(从服务器):
1. 创建目录结构:slave/conf、slave/data、slave/logs2. 启动运行实例容器:docker run --name mysql-slave> -p 3310:3306> -v ~/docker/slave/conf:/etc/mysql/conf.d> -v ~/docker/slave/data:/var/lib/mysql> -v ~/docker/slave/logs:/var/log/mysql> -e MYSQL_ROOT_PASSWORD=123456> -d mysql:5.73. 进入容器docker exec -it mysql-slave bash4. 登录MySQLmysql -uroot -p
第二步:配置文件(my.cnf)修改
主服务器:[mysqld]port = 3306server-id = 1#要同步的数据库binlog-do-db = school#要生成二进制日志文件 主服务器一定要开启log-bin = mysql-bin重启MySQL: docker restart mysql-master
从服务器:[mysqld]port = 3306server-id = 2#要同步的数据库binlog-do-db = school#要生成二进制日志文件(从服务器可选)log-bin = mysql-bin重启MySQL: docker restart mysql-slave
第三步:创建主服务器复制用户及相关权限
create user 'slave'@'%' identified by '123456';//创建用户grant replication slave,replication client on *.* to 'slave'@'%';//设置用户权限flush privileges;//刷新权限show grants for 'slave'@'%';//查看用户权限
第四步:数据备份同步
1. 登录master,执行锁表操作mysql -uroot -pFLUSH TABLES WITH READ LOCK;2. 将master中需要同步的db的数据dump出来mysqldump -uroot -p school > school.dump3. 将数据导入slavemysql -uroot -h272.17.0.4 -p school < school.dump4. 解锁masterUNLOCK TABLES;
第五步:主服务器复制状态
1. 创建新数据表及增加数据create table user( id int(10) auto_increment, name varchar(30), primary key (id) )charset=utf8mb4;insert into user(name) values(222);2. 主服务器 binlog 记录状态mysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000001 | 769 | school | | |+------------------+----------+--------------+------------------+-------------------+
第六步:从服务器开始复制
1. 连接主服务器及设置复制的起始节点mysql> change master to master_host='172.17.0.3',-> master_port=3306,-> master_user='slave',-> master_password='123456',-> master_log_file='mysql-bin.000001',-> master_log_pos=769;2. 开始复制start slave;3. 查看复制状态mysql> show slave status \G*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 172.17.0.3Master_User: slaveMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 961Relay_Log_File: 87dc5224655d-relay-bin.000003Relay_Log_Pos: 320Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: Yes //表示I/O线程读取成功Slave_SQL_Running: Yes //表示SQL线程执行成功Replicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 961Relay_Log_Space: 892Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id: 1Master_UUID: 45540733-4e0c-11ea-b0ac-0242ac110003Master_Info_File: /var/lib/mysql/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set:Auto_Position: 0Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version:4. 查看数据表数据mysql> show create table user\G*************************** 1. row ***************************Table: userCreate Table: CREATE TABLE `user` (`id` int(10) NOT NULL AUTO_INCREMENT,`name` varchar(30) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4mysql> select * from user;+----+------+| id | name |+----+------+| 1 | 222 |+----+------+
复制的控制相关命令:stop salve //停止slave连路 reset slave //重置slave连路 start slave //开启slave连路 stop master //停止master连路 reset master //重置master连路 start master //开启master连路
第七步:主从服务器的进程查看
mysql-master:
mysql-slave:
看完上述内容,是不是对MySQL主从复制的用法有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。
服务
服务器
数据
线程
主从
日志
文件
同步
数据库
两个
内容
容器
权限
用户
语句
生成
一致
实例
状态
登录
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全策略的技术
温州市优讯网络技术有限公司
千牛跟服务器断开连接
网络安全征文500字
网络安全法重大事件
中国数据库产品发展
数据库估算语句耗时
湖南湘潭计算机网络技术应用
网络安全演练标语
南大网络安全考研
乌鲁木齐网络技术推荐厂家
网络安全攻防演练总结文库
五华区网络安全工作
开源的视频点播服务器
缓存常用数据库
工业网络技术 月薪
玩ufc说服务器超时是怎么回事
底层软件开发内容
一品威客做软件开发
社区网络安全法制讲座
虹口区服务软件开发管理办法
北京禾田雨橡互联网科技
河南ukey连接服务器失败
软件开发项目量化
数据库迁移开源工具
ug服务器许可证
列存储属于关系型数据库吗
工业网络技术 月薪
成都三岳倍信网络技术公司
网络安全审计考研专业