MySQL主从(介绍,配置主机,配置从机,测试主从同步)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

一、介绍及准备工作

  • 1.介绍

  • MySQL主从配置又叫Replication或者AB复制,简单讲就是A和B两台机器做主从后,在A上写数据,另一台B也会跟着写数据,两台数据实时同步。

  • MySQL主从是基于binlog的,主上须开启binlog才能进行主从。

  • 主从过程大致有3个步骤

  1. 主将更改操作记录到Binlog里

  2. 从将主的Binlog事件(sql语句)同步到从本机上并记录在relaylog里

  3. 从根据relaylog里面的sql语句按顺序执行

  • 主上有一个logdump线程,用来和从的i/o线程传递binlog

  • 从上有两个线程,其中i/o线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句执行一遍。


适用场景:

(1)做数据库数据备份,仅仅是备份,当主机宕机时,马上从机可以代替主机。

(2)还是做数据备份,但是和主机一样,会向web服务器提供服务。但是不能往从机上写数据。



  • 主从延迟:「步骤2」开始,到「步骤7」执行结束。

  • 步骤 2:存储引擎处理,时间极短

  • 步骤 3:文件更新通知,磁盘读取延迟

  • 步骤 4:Bin Log 文件更新的传输延迟,单线程

  • 步骤 5:磁盘写入延迟

  • 步骤 6:文件更新通知,磁盘读取延迟

  • 步骤 7:SQL 执行时长


Master上 1 个IO线程,负责向Slave传输 binary logbinlog

Slave上 2 个线程:IO 线程执行SQL的线程,其中:

IO线程:将获取的日志信息,追加到relay log上;

执行SQL的线程:检测到relay log中内容有更新,则在Slave上执行sql;

2.准备工作

准备两台机器,上面都要安装MySQL。

MySQL的安装这里就不说了,前面日志会有。

这里经常会出现一个权限问题。因为/data/mysql下的文件所有者和所属组都变成了root。用chmod改成MySQL即可。


二、配置MySQL的主机

1.安装MySQL


2.修改/etc/my.cnf文件,添加以下2段

 server-id=100

 log_bin=litongyao1              (生成binlog,litongyao1是他的文件开头) 

重新启动mysql

[root@zhuji ~]# /etc/init.d/mysqld restart 

接下来我们查看/data/mysql下,

[root@zhuji ~]# ll /data/mysql/

总用量 110700

-rw-rw----. 1 mysql mysql       56 11月 30 14:48 auto.cnf

-rwxr-xr-x. 1 mysql mysql 12582912 12月 29 13:59 ibdata1

-rwxr-xr-x. 1 mysql mysql 50331648 12月 29 13:59 ib_logfile0

-rwxr-xr-x. 1 mysql mysql 50331648 11月 30 14:15 ib_logfile1

drwx------. 2 mysql mysql       62 12月 28 21:01 java_test

-rw-rw----. 1 mysql mysql      120 12月 29 13:59 litongyao1.000001

-rw-rw----. 1 mysql mysql      143 12月 29 13:59 litongyao1.000002

-rw-rw----. 1 mysql mysql      120 12月 29 13:59 litongyao1.000003

-rw-rw----. 1 mysql mysql       60 12月 29 13:59 litongyao1.index

drwxr-xr-x. 2 mysql mysql     4096 12月 19 17:05 mysql

drwxr-xr-x. 2 mysql mysql     4096 11月 30 14:15 performance_schema

drwx------. 2 mysql mysql       50 12月 19 17:50 rxr

drwxr-xr-x. 2 mysql mysql        6 11月 30 14:14 test

-rw-rw----. 1 mysql mysql    73149 12月 29 13:59 zhuji.err

-rw-rw----. 1 mysql mysql        5 12月 29 13:59 zhuji.pid

drwx------. 2 mysql mysql     4096 12月 28 20:17 zrlog


3.把mysql库备份并恢复成litongyao库,作为测试数据

[root@zhuji ~]# mysqldump -uroot -paminglinux rxr > /tmp/rxr.sql

[root@zhuji ~]# ll /tmp/rxr.sql 

-rw-r--r--. 1 root root 1780 12月 29 14:27 /tmp/rxr.sql

[root@zhuji ~]# mysql -uroot -paminglinux -e "create database litongyao"

[root@zhuji ~]# mysql -uroot -paminglinux litongyao < /tmp/rxr.sql 


4.创建MySQL用户用作同步数据

mysql> grant replication slave on *.* to 'repl'@'192.168.52.100' identified by 'rxr123456';

Query OK, 0 rows affected (0.00 sec)


mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)


mysql> show master status;                   (这里要记住binlog的名字file,还有它的位置Position)         

+-------------------+----------+--------------+------------------+-------------------+

| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+-------------------+----------+--------------+------------------+-------------------+

| litongyao1.000003 |     1029 |        |            |             |

+-------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)


[root@zhuji ~]# mysqldump -uroot -paminglinux zrlog > /tmp/zrlog.sql

Warning: Using a password on the command line interface can be insecure.


三、配置从机

  1. 安装MySQL

  2. 查看my.cnf,配置server-id,要求和主不一样。

server-id=101

3.重新启动MySQL服务

[root@congji ~]# /etc/init.d/mysqld restart

Shutting down MySQL.. SUCCESS! 

Starting MySQL.. SUCCESS!

4.把主上的litongyao库同步到从上

(1)把备份的库文件用scp到从机上

[root@congji ~]# scp 192.168.52.101:/tmp/*.sql /tmp/

root@192.168.52.101's password: 

rxr.sql          100% 1780     1.7KB/s   00:00    

zrlog.sql         100% 9886     9.7KB/s   00:00    

(2)创建相应的数据库

mysql> create database rxr;

Query OK, 1 row affected (0.00 sec)

mysql> create database zrlog;

Query OK, 1 row affected (0.00 sec)

(3)把备份的库恢复到从机上,保证主从2边数据库一致

[root@congji bin]# mysql -uroot zrlog < /tmp/zrlog.sql 

[root@congji bin]# mysql -uroot rxr < /tmp/rxr.sql

(4)停止主从同步

mysql> stop slave;

Query OK, 0 rows affected, 1 warning (0.00 sec)

(5)接下来就是最重要的一步操作,在从机上配置主机的ip,用户名,密码,binlog的name以及pos。

mysql> change master to master_host='192.168.52.101', master_user='repl', master_password='rxr123456', master_log_file='litongyao1.000003', master_log_pos=1029;

Query OK, 0 rows affected, 2 warnings (0.01 sec)

(6)开启主从同步

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

(7)查看主从有没有配置成功    (查看是否有两个yes)

mysql> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.52.101

                  Master_User: repl

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: litongyao1.000003

          Read_Master_Log_Pos: 1029

               Relay_Log_File: congji-relay-bin.000002

                Relay_Log_Pos: 284

        Relay_Master_Log_File: litongyao1.000003

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes


(8)解锁主机上的表,让它恢复写的操作

(主机:192.168.52.101)

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)


四、测试主从同步

几个配置参数:在/etc/my.cnf里

主服务器上:

 binlog-do-db=                  //仅同步指定的库

 binlog-ignore-db=               //忽略指定库

从服务器上:

(推荐应用等级:中)

 replicate_do_db=               //仅同步指定的库 

 replicate_ignore_db=           //忽略指定库

(推荐应用等级:低)万一不通的库里有同名的表

 replicate_do_table=           //仅同步指定的表

 replicate_ignore_table=        //忽略指定表

(推荐应用等级:高)

 replicate_wild_do_table=   //如aming.%, 支持通配符%      //仅同步指定库里的指定表

 replicate_wild_ignore_table=                      //不同步指定库里的指定表



测试主从:

主机:

mysql> use rxr;

Database changed

mysql> show tables;

Empty set (0.00 sec)

从机:

mysql> use rxr;

Database changed

mysql> show tables;

Empty set (0.00 sec)


增加一个表:

主机:

mysql> create table lty(`id`int(4),`name`char(40));

Query OK, 0 rows affected (0.06 sec)


mysql> show tables;

+---------------+

| Tables_in_rxr |

+---------------+

| lty       |

+---------------+

1 row in set (0.00 sec)


从机:

cremysql> show tables;

+---------------+

| Tables_in_rxr |

+---------------+

| lty           |

+---------------+

1 row in set (0.00 sec)

增加表实现主从同步。


删除表:

主机:

mysql> drop table lty;

Query OK, 0 rows affected (0.26 sec)


mysql> show tables;

Empty set (0.00 sec)


从机:

mysql> show tables;

Empty set (0.00 sec)


删除表也实现了主从同步。



三、如果误操作,导致主从同步异常,怎么办?

最重要的一步就是马上关闭主从同步:

stop slave;

接着马上做一步操作:

change master to master_host='', master_user='repl', master_password='', master_log_file='', master_log_pos=xx,

接着打开主从同步:

start slave;

然后查看是否恢复正常。











本文转自 小新锐 51CTO博客,原文链接:http://blog.51cto.com/13407306/2067289,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
19天前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
208 7
|
5月前
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
359 11
|
6月前
|
Ubuntu 关系型数据库 MySQL
在Ubuntu 22.04上配置和安装MySQL
以上就是在Ubuntu 22.04上配置和安装MySQL的步骤。这个过程可能看起来有点复杂,但只要按照步骤一步步来,你会发现其实并不难。记住,任何时候都不要急于求成,耐心是解决问题的关键。
651 30
|
6月前
|
SQL 缓存 关系型数据库
使用温InnoDB缓冲池启动MySQL测试
使用温InnoDB缓冲池启动MySQL测试
108 0
|
6月前
|
SQL 缓存 关系型数据库
MySQL8.4 Enterprise安装Firewall及测试
MySQL8.4 Enterprise安装Firewall及测试
144 0
|
6月前
|
安全 关系型数据库 MySQL
MySQL8使用物理文件恢复MyISAM表测试
MySQL8使用物理文件恢复MyISAM表测试
90 0
|
4月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
750 23
|
9月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
6月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
721 24
|
6月前
|
SQL 测试技术
除了postman还有什么接口测试工具
最好还是使用国内的接口测试软件,其实国内替换postman的软件有很多,这里我推荐使用yunedit-post这款接口测试工具来代替postman,因为它除了接口测试功能外,在动态参数的支持、后置处理执行sql语句等支持方面做得比较好。而且还有接口分享功能,可以生成接口文档给团队在线浏览。
242 2

热门文章

最新文章

推荐镜像

更多