学习
路无止境!

没有伞的孩子要学会努力奔跑!


  • 首页

  • 归档

  • 关于我

  • 公益404

  • 搜索

MySQL 主从复制

主从配置实验

MySQL从3.25.15版本开始提供数据库复制(replication)功能。MySQL复制是指从一个MySQL主服务器(master)将数据复制到另一台或多台MySQL从服务器(slaves)的过程,将主数据库的DDL和DML操作通过二进制日志传到从服务器上,然后在从服务器上对这些日志重新执行,从而使得主从服务器的数据保持同步。

因为二进制日志包含备份后已完成的所有更新,这里利用了二进制日志的这个特性,从而最大可能地恢复数据库。

MySQL主从复制/架构优势

  1. 主库负责写,从库负责读,增强效率。
  2. 数据热备,主库宕机后能够及时替换主库,保证业务可用性和持续性。
  3. 分布式结构,支持业务弹性扩展。

主从的方式

  • 一主一从
  • 一主多从
  • 多主一从 (从5.7开始支持)
  • 双主复制
  • 级联复制,部分slave的数据同步不连接主节点,而是连接从节点

架构与流程

https://img-blog.csdnimg.cn/20210430211132239.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM5NDcyNA==,size_16,color_FFFFFF,t_70#pic_center

MySQL数据库复制操作大致可以分成3个步骤:

  • 步骤01 主服务器将数据的改变记录到二进制日志(binarylog)中。主服务器会记录二进制日志,每个事务更新数据完成之前,主服务器将这些操作的信息记录在二进制日志里面,在事件写入二进制日志完成后,主服务器通知存储引擎提交事务。
  • 步骤02 从服务器将主服务器的binary log events复制到它的中继日志(relay log)中。Slave上面的I/O进程连接上Master,并发出日志请求,Master接收到来自Slave的IO进程的请求后,根据请求信息添加位置信息后,返回给Slave的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置。
  • 步骤03 从服务器重做中继日志中的事件,将数据的改变与从服务器保持同步。Slave的I/O进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到Master端的bin-log文件名和位置记录到master-info文件中。Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时的那些可执行内容,并在自身执行。 MySQL主从复制涉及到三个线程,一个运行在主节点(log dump thread),其余两个(I/O thread, SQL thread)运行在从节点。

实验部分

环境

MySQL版本主服务器必须一致

KeyIP主机OSMySQL版本
Master10.105.130.10CentOS 7(2009)8.0.24
Slave10.105.130.61CentOS 7 (2009)8.0.24

实验步骤

在主从节点安装MySQL并初始化MySQL

简单的使用官方源安装

  1. rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm
  2. sed -i ’s/enabled=1/enabled=0/’ /etc/yum.repos.d/mysql-community.repo
  3. yum –enablerepo=mysql80-community install mysql-community-server
  4. systemctl start mysqld
  5. grep “A temporary password” /var/log/mysqld.log#查看初始密码
  6. mysql_secure_installation

配置Master

  1. 登录主服务器,设置一个复制使用的账户,并授予REPLICATION SLAVE权限。
mysql>  create user 'slave'@'%' identified by 'VMware1!';
Query OK, 0 rows affected (0.01 sec)

mysql> grant replication slave on *.* to 'slave';
Query OK, 0 rows affected (0.01 sec)

如果用root账号的话,这一步可以省略。

  1. 在CentOS下修改my.cnf文件配置以下参数,开启BINLOG,并设置server-id的值。
[mysqld]

server_id = 1

log_bin = mysql-bin
  1. 需要重启MySQl:
[root@s-mysql-61 ~]# systemctl restart mysqld
  1. 登录MyQSL查询主服务器上当前的二进制日志名和偏移值。
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000006 |      156 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

配置Slave

  1. 测试Master server的连接:
[root@s-mysql-61 ~]# mysql -h  10.105.130.10 -u 'root' -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '10.105.130.10:3306' (113)

前面已经检查过/etc/my.cfg,没有问题 在Master上查看root的权限:

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select user,host from user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| slave            | %         |
| zyi              | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

root只有localhost权限,需要赋权。

mysql> update user set host='%' where user='root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

赋予root ‘%’权限

mysql> select user,host from user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| slave            | %         |
| zyi              | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

https://img-blog.csdnimg.cn/2021043021452511.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM5NDcyNA==,size_16,color_FFFFFF,t_70

  1. 在CentOS下修改my.cnf文件配置以下参数,设置server-id的值。
[mysqld]

server_id = 2 #唯一标识

重启MySQL

[root@s-mysql-61 ~]# systemctl restart mysqld
  1. 对从数据库服务器做相应的设置,指定复制使用的用户、主数据库服务器的IP和端口,以及开始执行复制的日志文件和位置
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> change master to
    -> master_host='10.105.130.10',
    -> master_user='root',
    -> master_password='xxxxxx!',
    -> master_log_file='mysql-bin.000006',
    -> master_log_pos=156;
Query OK, 0 rows affected, 8 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)
  1. 查看连接状态
mysql> show slave status\\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.105.130.10
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos: 156
               Relay_Log_File: s-mysql-61-relay-bin.000002
                Relay_Log_Pos: 324
        Relay_Master_Log_File: mysql-bin.000006
             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: 156
标志性提示:
         Slave_IO_Running: Yes
        Slave_SQL_Running: Yes

检查效果

1.在Slave上查看数据库情况

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| BUNOON             |
| Market             |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

可以看到Master的BUNOON和Market数据库已经同步了。在查看一张table

mysql> use Market;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from fruits;
+------+------+------------+---------+
| f_id | S_id | f_name     | f_price |
+------+------+------------+---------+
| 12   |  104 | lemon      |    6.40 |
| a1   |  101 | apple      |    5.20 |
| a2   |  103 | apricot    |    2.20 |
| b2   |  104 | berry      |    7.60 |
| b5   |  107 | xxxx       |    3.60 |
| bl   |  101 | blackberry |   10.20 |
| bs1  |  102 | orange     |   11.20 |
| bs2  |  105 | melon      |    8.20 |
| c0   |  101 | cherry     |    3.20 |
| m1   |  106 | mango      |   15.70 |
| m2   |  105 | xbabay     |    2.60 |
| m3   |  105 | xxtt       |   11.60 |
| o2   |  103 | coconut    |    9.20 |
| t1   |  102 | banana     |   10.30 |
| t2   |  102 | grape      |    5.30 |
| t4   |  107 | xbababa    |    3.60 |
+------+------+------------+---------+
16 rows in set (0.00 sec)
  1. 在Master上面新增数据库
mysql> create database et;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| BUNOON             |
| Market             |
| et                 |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.01 sec)

Slave:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| BUNOON             |
| Market             |
| et                 |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

以上。

  • 文章目录
  • 站点概览
Etaon

Etaon

Kepp Going!

80 日志
15 分类
43 标签
GitHub CSDN
友情链接
  • Kubernetes
  • Cisco
  • W3School
  • 廖雪峰
标签云
  • Mysql
  • Aws
  • Dql
  • Hadoop
  • Kubernetes
  • Nsx t
  • Redis
  • Azure
  • Cicd
  • Git
  • 主从配置实验
    • MySQL主从复制/架构优势
    • 主从的方式
    • 架构与流程
  • 实验部分
    • 环境
    • 实验步骤
    • 在主从节点安装MySQL并初始化MySQL
    • 配置Master
    • 配置Slave
    • 检查效果
© 2010 - 2023 路无止境!
Powered by - Hugo v0.101.0 / Theme by - NexT
/
Storage by Azure static web apps /
0%