mysql主从复制配置
主从复制的基本原理
- (1)master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中;
- (2)slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件
- (3)同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。
也就是说:
- 从库会生成两个线程,一个I/O线程,一个SQL线程;
- I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;
- 主库会生成一个log dump线程,用来给从库I/O线程传binlog;
- SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行;
基本原则
- 每个slave只有一个master
- 每个slave只能有一个唯一的服务器ID
- 每个master可以有多个slave
配置
mysql版本要求一致且后台以服务运行。
主从都配置在[mysqld]结点下,都是小写
主服务器配置
修改my.cnf配置文件vi /etc/my.cnf
,添加如下配置项:
#主服务器唯一Id[必填]
server-id=1
#启用二进制日志[必填]
log-bin=mysql-bin
#主机,读写都可以
read-only=0
#设置不要复制的数据库[可选]
#binlog-ignore-db=mysql
#设置需要复制的数据库[可选](输数据库名字)可以设置多个
binlog-do-db=test
重启数据服务 service mysqld restart
登陆MySQL数据库设置允许从库获得主库日志
mysql -u root -p
#给从库放权限
mysql>GRANT FILE ON *.* TO 'root'@'192.168.52.74' IDENTIFIED BY 'root password'; #创建用户
mysql>GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.52.74' IDENTIFIED BY 'root password'; #修改用户权限
mysql>select host , user from mysql.user; #查看是否修改成功
mysql>FLUSH PRIVILEGES; #刷新权限
重启MySQL服务,登录MySQL,查看主库信息:
[root@localhost ~]# service mysqld restart #重启mysql服务
[root@localhost ~]# mysql -u root -p #登陆mysql
mysql> show master status; #查看master状态
显示内容如下:
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 154 | test | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
从服务器配置
修改my.cnf配置文件vi /etc/my.cnf
,添加如下配置项:
#主从复制配置
#从服务器唯一Id
server-id=2
#只读,对拥有super权限的账号是不生效的
read_only = 1
重启MySQL服务,登录MySQL
[root@localhost ~]# service mysql restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
[root@localhost ~]# mysql -u root -p
修改配置
mysql> stop slave; // 关闭Slave
mysql> change master to master_host='192.168.52.75',master_user='root',master_password='123456',master_log_file='mysql-bin.000002', master_log_pos=154; // 设置连接主库信息
mysql> start slave; //开启Slave
完整sql
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> change master to master_host='192.168.52.75',master_user='root',master_password='123456',master_log_file='mysql-bin.000002', master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
上面的master_log_file是在配置Master的时候的File字段, master_log_pos是在配置Master的Position 字段。一定要一一对应
查看从库信息 show slave status \G;
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.52.75
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 154
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
Relay_Log_Space: 531
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 2c6a4500-2b69-11ed-ac16-000c293fff2e
Master_Info_File: /usr/local/mysql/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
ERROR:
No query specified
mysql基本的主从复制就配置好了,此时在主服务器创建表修改数据等,就会同步到从服务器
评论区
请写下您的评论...
猜你喜欢
blog
mysql日志分析【二进制日志】
数据库
1411
开启和设置二进制日志日志切换二进制日志相关参数二进制日志恢复数据库上一篇文章介绍了普通查询日志和慢查询日志等参考:mysql日志分析,本篇主要介绍二进制日志。一、什么是二进制日志 二进制日志主要记
blog
linux ssh远程复制文件
linux
1146
假如服务器A,B都有ssh服务,现在在A服务器中。一、从A复制到B(推过去)scp-rp/path/filenameusername@remoteIP:/path二、从B复制到A(拉过来)scp-rpusername@remoteIP:/path/filename/path
maven
1112
build
plugins
plugin
groupIdorg.apache.maven.plugins/groupId
artifactIdmaven-shade-plugin/artifactId
version3.2.4/version!--使用最新版本--
executions
execution
phasepackage/phase
goals
goalshade/goal
/goals
weblog
1188
ALTERTABLEdatabaseName.tableNameADDUNIQUE(columnName);databaseName:数据库名tableName:表明columnName:字段名
blog
linux系统yum安装git及配置
工具
1698
安装命令yum-yinstallgit查看版本git--version配置远程ssh,执行:gitconfig--globaluser.name"yourname"gitconfig
official
1506
首先配置maven,参考:https://packages.aliyun.com/maven
在项目中添加如下配置
distributionManagement
repository
blog
redis哨兵模式环境搭建
redis
1117
介绍 单机版的Redis存在性能瓶颈,Redis通过提高主从复制实现读写分离,提高了了Redis的可用性,另一方便也能实现数据在多个Redis直接的备份。 通过配置Redis的主从复制机制可以提
official
705
网页复制的表格转markdown表格importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader
最新发表
归档
2018-11
12
2018-12
33
2019-01
28
2019-02
28
2019-03
32
2019-04
27
2019-05
33
2019-06
6
2019-07
12
2019-08
12
2019-09
21
2019-10
8
2019-11
15
2019-12
25
2020-01
9
2020-02
5
2020-03
16
2020-04
4
2020-06
1
2020-07
7
2020-08
13
2020-09
9
2020-10
5
2020-12
3
2021-01
1
2021-02
5
2021-03
7
2021-04
4
2021-05
4
2021-06
1
2021-07
7
2021-08
2
2021-09
8
2021-10
9
2021-11
16
2021-12
14
2022-01
7
2022-05
1
2022-08
3
2022-09
2
2022-10
2
2022-12
5
2023-01
3
2023-02
1
2023-03
4
2023-04
2
2023-06
3
2023-07
4
2023-08
1
2023-10
1
2024-02
1
2024-03
1
2024-04
1
2024-08
1
标签
算法基础
linux
前端
c++
数据结构
框架
数据库
计算机基础
储备知识
java基础
ASM
其他
深入理解java虚拟机
nginx
git
消息中间件
搜索
maven
redis
docker
dubbo
vue
导入导出
软件使用
idea插件
协议
无聊的知识
jenkins
springboot
mqtt协议
keepalived
minio
mysql
ensp
网络基础
xxl-job
rabbitmq
haproxy
srs
音视频
webrtc
javascript
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。