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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

一、介绍及准备工作

  • 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,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
172 0
|
13天前
|
关系型数据库 MySQL 测试技术
【赵渝强老师】MySQL的基准测试与sysbench
本文介绍了MySQL数据库的基准测试及其重要性,并详细讲解了如何使用sysbench工具进行测试。内容涵盖sysbench的安装、基本使用方法,以及具体测试MySQL数据库的步骤,包括创建测试数据库、准备测试数据、执行测试和清理测试数据。通过这些步骤,可以帮助读者掌握如何有效地评估MySQL数据库的性能。
|
1月前
|
Java 关系型数据库 MySQL
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
这篇文章是关于自动化测试项目实战笔记,涵盖了JDK、Tomcat、MySQL、Jpress环境的安装和搭建过程,以及测试用例和常见问题总结。
52 1
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
|
21天前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
21 1
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
70 4
|
1月前
|
运维 监控 数据可视化
大数据-171 Elasticsearch ES-Head 与 Kibana 配置 使用 测试
大数据-171 Elasticsearch ES-Head 与 Kibana 配置 使用 测试
66 1
|
1月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
44 1
|
1月前
|
SQL 存储 关系型数据库
Mysql主从同步 清理二进制日志的技巧
Mysql主从同步 清理二进制日志的技巧
28 1
|
1月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
137 0
|
12天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
26 1