MySQL 初始化

MySQL 主从复制是指数据可以从一个 MySQL 数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式;从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表.

1. 安装指定版本

yum install -y http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum install -y mysql-community*5.7.30-1.el7.x86_64

2. 初始化账号

set global validate_password_policy=0; set global validate_password_length=4;
alter user user() identified by 'root';
update mysql.user set host='%' where user='root';
flush privileges;

Master 端配置

1. 修改 mysqld 配置文件

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
max_connections = 2000
server-id=1
log-bin=mysql-binlog
binlog_format = ROW
binlog_row_image = minimal
; 仅记录数据库 demo01 的二进制日志 binlog
binlog-do-db = demo01

systemctl restart mysqld

2. 创建复制账号

grant replication slave on _._ to 'repl'@'%' identified by '123456';
flush privileges;

3. 查看主库状态

show master status\G;

*************************** 1. row ***************************
File: mysql-binlog.000002
Position: 306
Binlog_Do_DB: demo01
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

Slave 端配置

1. 修改 mysqld 配置文件

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
max_connections = 2000 server-id=2
log-bin=mysql-binlog
binlog_format = ROW
binlog_row_image = minimal
master_info_repository = TABLE
relay_log_info_repository = TABLE
; 当 relay-log 损坏时, 可根据当前slave端sql线程回放的位置, 重新从master上获取日志
relay_log_recovery = 1 ; 备注:
; mysql slave端二进制日志没有其它用途,其实可以不必开启从端 binlog

2. 设置主从复制时的元数据(master 同步主机账号及 binlog 文件和位置)

mysql> change master to
master_host="192.168.31.17",
master_port=3306,
master_user="repl",
master_password="123456",
master_log_file="mysql-binlog.000002",
master_log_pos=306; ; 设置从库只读, 并启动slave
mysql> set global super_read_only=1;
mysql> start slave;

3. 查看状态

show slave status\G;

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.31.17
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-binlog.000002
Read_Master_Log_Pos: 306
Relay_Log_File: c8-relay-bin.000002
Relay_Log_Pos: 323
Relay_Master_Log_File: mysql-binlog.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: 306
Relay_Log_Space: 527
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 # slave 端落后于 master 端多少秒
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: 7aa006de-1b3f-11eb-842d-525400f46c59
Master_Info_File: mysql.slave_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)

主要参数项说明

  • slave io thread 按照 Master_Log_File、Read_Master_Log_Pos 位置读取主库的 binlog,并写入到本地 relay log
  • slave sql thread 按照 Relay_Log_File、Relay_Log_Pos 位置进行 realy log 的回放

从服务器 sql 线程执行状态

  • Waiting for the next event in relay log 该状态是读取 relay log 之前的初始状态
  • Reading event from the relay log 该状态表示此线程已经在 relay log 中读取了一个事件准备执行
  • Making temp file 该状态表示此线程正在执行 LOAD_DATA_INFILE 并且正在创建一个临时文件来保存从服务器将要读取的数据
  • Slave has read all relay log; waiting for the slave I/O thread to update it 该线程已经处理完了 relay log 中的所有事件,现在正在等待 slave /O 线程更新 relay log 文件
  • Waiting for slave mutex on exit 当线程停止的时候会短暂的出现该情况
  • updating # 表示正在更新
  • Opening tables
  • Sending data

验证测试程

Master 端建库建表, 看 slave 端是否同步

master 端

-- 查看 slave 情况
show slave hosts;
show master status\G; create database demo01;
create database demo02;
use demo01;
create table user(
id int auto_increment,
name varchar(16) not null,
age int(16) not null,
primary key(id)
)engine=innodb charset=utf8;
-- 插入入数据
insert into user(name,age) values('tom',31),('user1', 18),('user2', 16),('user3', 33),('user4', 12); -- 查看 二进制文件
show binary logs;
+---------------------+-----------+
| Log_name | File_size |
+---------------------+-----------+
| mysql-binlog.000001 | 177 |
| mysql-binlog.000002 | 1079 |
+---------------------+-----------+
2 rows in set (0.00 sec) -- 查看 二进制事件
show binlog events in 'mysql-binlog.000002';
+---------------------+------+----------------+-----------+-------------+--------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------------+------+----------------+-----------+-------------+--------------------------------------+
| mysql-binlog.000002 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.30-log, Binlog ver: 4|
| mysql-binlog.000002 | 123 | Previous_gtids | 1 | 154 | |
| mysql-binlog.000002 | 154 | Anonymous_Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'|
| mysql-binlog.000002 | 219 | Query | 1 | 306 | flush privileges |
| mysql-binlog.000002 | 306 | Anonymous_Gtid | 1 | 371 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'|
| mysql-binlog.000002 | 371 | Query | 1 | 471 | create database demo01|
| mysql-binlog.000002 | 471 | Anonymous_Gtid | 1 | 536 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'|
| mysql-binlog.000002 | 536 | Query | 1 | 748 | use `demo01`; create table user(
id int auto_increment,
name varchar(16) not null,
age int(16) not null,
primary key(id)
)engine=innodb charset=utf8 |
| mysql-binlog.000002 | 748 | Anonymous_Gtid | 1 | 813 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'|
| mysql-binlog.000002 | 813 | Query | 1 | 887 | BEGIN|
| mysql-binlog.000002 | 887 | Table_map | 1 | 940 | table_id: 108 (demo01.user)|
| mysql-binlog.000002 | 940 | Write_rows | 1 | 1048 | table_id: 108 flags: STMT_END_F|
| mysql-binlog.000002 | 1048 | Xid | 1 | 1079 | COMMIT /* xid=24 */|
+---------------------+------+----------------+-----------+-------------+--------------------------------------+
13 rows in set (0.00 sec) -- 二进制事件位置 Pos 813 ~ 1048 执行的是如下插入操作
insert into user(name,age) values('tom',31),('user1', 18),('user2', 16),('user3', 33),('user4', 12);

slave 端

-- 从端查看是否同步
show databases; -- 查看指定数据是否同步
use demo01;
select * from user;
+----+-------+-----+
| id | name | age |
+----+-------+-----+
| 1 | tom | 31 |
| 2 | user1 | 18 |
| 3 | user2 | 16 |
| 4 | user3 | 33 |
| 5 | user4 | 12 |
+----+-------+-----+
5 rows in set (0.01 sec)

MySQL 主从复制一主两从环境配置实战的更多相关文章

  1. MySQL主从复制(一主两从)

       主库开启bin-log二进制日志功能,并建立slave账号,并授权从库连接主库,从库通过change master得到主库的相关同步信息, 然后连接主库进行验证,主库产生的新数据会导入到bin- ...

  2. MYSQL主从复制、主主复制、双主多从配置

    一.如何配置MYSQL的主从复制? 1. 两台数据库服务器,IP分别为 192.168.216.128 和 192.168.216.129,在服务器上装MYSQL(我的配置版本为5.5.56) 2. ...

  3. MySQL主从复制与主主复制

    1.简介 MySQL作为世界上使用最为广泛的数据库之一,免费是其原因之一.但不可忽略的是它本身的功能的确很强大.随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求.此时 ...

  4. MySQL 主从复制(实时热备)原理与配置

    MySQL是现在普遍使用的数据库,但是如果宕机了必然会造成数据丢失.为了保证MySQL数据库的可靠性,就要会一些提高可靠性的技术.MySQL主从复制可以做到实时热备数据.本文介绍MySQL主从复制原理 ...

  5. 基于Docker Compose搭建mysql主从复制(1主2从)

    系统环境 * 3 Ubuntu 16.04 mysql 8.0.12 docker 18.06.1-ce docker-compose 1.23.0-rc3 *3 ==> PS  ###我用的是 ...

  6. MySQL主从复制,主主复制,半同步复制

    实验环境: 系统:CentOS Linux release 7.4.1708 (Core) mariadb:mariadb-server-5.5.56-2.el7.x86_64 node1:172.1 ...

  7. Mysql主从同步的实现原理与配置实战

    1.什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 2.主从同步有什么好处? 水平扩展数据库的负载能力. 容错,高可用.Failover ...

  8. Sentry 监控 - Snuba 数据中台本地开发环境配置实战

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  9. MySQL建立双向主备复制server配置方法

    1.环境描写叙述 serverA(主) 192.85.1.175 serverB(从) 192.85.1.176 Mysql版本号:5.1.61 系统版本号:System OS:ubuntu 10.1 ...

随机推荐

  1. javaweb-thymeleaf,加载jar包---视图基础

    1.加载完thymeleaf的jar包 将thymeleaf的jar包复制到项目下lib文件夹中 右击lib文件夹,点击Add as librarb... 打开Project Structure,找到 ...

  2. 第八十一篇:Vue购物车(二) 名称,图片,价格的渲染

    好家伙, 1,为组件封装属性, 需要封装以下属性: 需要定义的属性 属性名 值的类型 商品名 title String 商品图片 pic String 商品价格 price Number 是否勾选 s ...

  3. VS Code 之KoroFileHeader插件

    设置 在vscode左下角点击设置按钮,选择"设置",然后输入"fileheader", 文件头部注释:Fileheader:custom Made 函数注释: ...

  4. STC15 串口通信

    串口1选择定时器2产生波特率 串口1相关寄存器 1.选择串口1所放的管脚 2.串口1配置步骤 3.选择串口工作模式 4.确定定时器2工作速度 代码配置 void Uart1_Tim2_Config(i ...

  5. JVM之HotSpot虚拟机是如何发起内存回收的? 转载

    1.背景 在上一节中,我们掌握了垃圾收集的一些算法,也弄明白了分代回收的原理, 那么HotSpot虚拟机是如何发起内存回收的? 2.如何找到GC Roots根节点(枚举根节点) 从可达性分析中GC R ...

  6. 【读书笔记】C#高级编程 第七章 运算符和类型强制转换

    (一)运算符 类别 运算符 算术运算符 + - * / % 逻辑运算符 & | ^ ~ && || ! 字符串连接运算符 + 增量和减量运算符 ++ -- 移位运算符 < ...

  7. 项目管理构建工具——Maven(基础篇)

    项目管理构建工具--Maven(基础篇) 在前面的内容中我们学习了JDBC并且接触到了jar包概念 在后面我们的实际开发中会接触到很多jar包,jar包的导入需要到互联网上进行就会导致操作繁琐 Mav ...

  8. 阿里云Centos7部署私人CSGO服务器

    大四毕业生,论文和答辩分别以1.8%的重复率和只答不辨的态度双双过关.现在就是在家等着学校发毕业证了.顺带学学驾驶...可是我这么一个喜欢折腾的人,怎么能够让自己接受这么无聊的咸鱼时光呢?因为这个寒假 ...

  9. SDUT 2022 Autumn Team Contest 7th

    1.J题:给你T组数据,每一组数据给你一个区间,让你求这个区间的范围,区间的起始时间和终止时间可能被包含或重复 思路:思路的话,就是直接把给定的两个区间的之间的数包括端点存到vector去重,然后直接 ...

  10. Java SE Object类

    1.Object类 equals 方法 == 和 equals 的对比 == 是一个比较运算符 == 既可以判断基本类型,又可以判断引用类型 == 如果判断的是基本类型,判断的是值是否相等 == 如果 ...