msyql5.7主从复制

Posted 上海一亩地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了msyql5.7主从复制相关的知识,希望对你有一定的参考价值。

目录

mysql主从复制

合理的mysql主从复制需要3台机器,每台机器上都有mysql。
3台中,一台是master节点,负责数据写入。另外两台负责读取。
绝大多数的业务场景都是高读取、低写入。所以通过3个mysql配置成组合复制就能做出一个mysql的读写分离版本。

主从原理

  1. 当Master节点进行insert、update、delete操作时,会按顺序写入到binlog中。
  2. slave从库连接master主库,Master有多少个slave就会创建多少个binlog dump线程。
  3. 当Master节点的binlog发生变化时,binlog dump 线程会通知所有的salve节点,并将相应的binlog内容推送给slave节点。
  4. I/O线程接收到 binlog 内容后,将内容写入到本地的 relay-log。
  5. SQL线程读取I/O线程写入的relay-log,并且根据 relay-log 的内容对从数据库做对应的操作。

    主从复制的详细理论介绍推荐这篇博客

配置主从复制

准备3台机器,每台机器都安装了mysql5.7。编译安装方法可以参考这篇博客:
https://blog.csdn.net/qq_43626147/article/details/124732329

三台机器的ip:
10.0.0.101 master
10.0.0.102 slave1
10.0.0.103 slave2

master主节点配置

mysql -u root -p
Enter password: 123456

# 主节点上创建slave用户,用于和两台slave节点进行复制操作
mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
# 给slave用户添加复制binlog的权限
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
# 刷新mysql权限表
mysql> flush privileges;

mysql> exit;
Bye

# 开启binlog功能,这是实现主从复制的关键功能
vim /etc/mysql/conf.d/mysql.cnf
-------------------------------
[mysqld]  # 注意这里是mysqld,不是mysql
server-id=1 # 确保每台master或slave的server id不一样。
log-bin=mysql-bin
binlog_ignore_db=mysql # 不同步mysql库的binlog
# binlog-do-db=xxxx  # 你也可以选择只对某个db进行主从复制,这样性能更好。

# 重启mysql
systemctl restart mysqld

# 查看mysql master状态
mysql -u root -p
Enter password: 123456

mysql> show master status;
# 能显示file就表示binlog启动成功
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      769 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

slave从节点配置

# 编辑配置文件
vim /etc/mysql/conf.d/mysql.cnf
-------------------------------
[mysqld] # 注意这里是mysqld,不是mysql
relay-log=slave-bin
server-id=2

# 重启
systemctl restart mysqld

# 在slave上的mysql主动连接master
mysql -u root -p
Enter password: 123456

# 下面的命令中 master_log_file 和 master_log_pos的值来自主节点配置时show master status;的返回值。
mysql> change master to master_host='10.0.0.101',master_port=3306,master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=769;

# 启动slave
mysql> start slave;

# 查看主从复制是否已启动 ,能出现类似如下的返回说明是正常的,如果没有,等待一会看看或者自行排错。
mysql> show processlist;
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| Id | User        | Host      | db   | Command | Time | State                                                  | Info             |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
|  2 | root        | localhost | NULL | Query   |    0 | starting                                               | show processlist |
|  3 | system user |           | NULL | Connect |   29 | Waiting for master to send event                       | NULL             |
|  4 | system user |           | NULL | Connect |   29 | Slave has read all relay log; waiting for more updates | NULL             |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
3 rows in set (0.00 sec)

# 查看slave的详细信息
mysql> show slave status;

到此主从复制就完成了。
实际上这个属于异步同步模式,是mysql默认的主从复制模式,如果你想实现半同步复制和GTID模式,自行百度,然后修改配置重启mysqld即可。

以上是关于msyql5.7主从复制的主要内容,如果未能解决你的问题,请参考以下文章

二进制安装MySQL数据库

安装msyql5.7.24

msyql5.7数据类型和运算符

Centos7安装msyql5.7.14

msyql5.7 root账户误删恢复

redis主从复制详述