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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 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服务器提供服务。但是不能往从机上写数据。



mysql-master-slave-sync-process-with-det

  • 主从延迟:「步骤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,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
关系型数据库 MySQL 数据库
MySQL集群 双主架构(配置命令)
MySQL集群 双主架构(配置命令)
|
6天前
|
SQL 关系型数据库 MySQL
【MySQL-3】图形化界面工具DataGrip安装&配置&使用
【MySQL-3】图形化界面工具DataGrip安装&配置&使用
|
6天前
|
关系型数据库 MySQL Linux
【MySQL-2】MySQL的下载&安装&启停&配置环境变量【一条龙教程】
【MySQL-2】MySQL的下载&安装&启停&配置环境变量【一条龙教程】
|
7天前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之DataWorks集成实例绑定到同一个vpc下面,也添加了RDS的IP白名单报错:数据源配置有误,请检查,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
22 0
|
7天前
|
Ubuntu 关系型数据库 MySQL
Ubuntu 20.04 + mysql8 安装以及配置大小写不敏感
Ubuntu 20.04 + mysql8 安装以及配置大小写不敏感
|
7天前
|
DataWorks 关系型数据库 MySQL
DataWorks产品使用合集之在DataWorks中配置RDS MySQL数据源的步骤如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
21 0
|
8天前
|
存储 关系型数据库 MySQL
linux安装MySQL8.0,密码修改权限配置等常规操作详解
linux安装MySQL8.0,密码修改权限配置等常规操作详解
|
16天前
|
网络协议 安全 测试技术
性能工具之emqtt-bench BenchMark 测试示例
【4月更文挑战第19天】在前面两篇文章中介绍了emqtt-bench工具和MQTT的入门压测,本文示例 emqtt_bench 对 MQTT Broker 做 Beachmark 测试,让大家对 MQTT消息中间 BenchMark 测试有个整体了解,方便平常在压测工作查阅。
98 7
性能工具之emqtt-bench BenchMark 测试示例
|
28天前
|
测试技术 C语言
网站压力测试工具Siege图文详解
网站压力测试工具Siege图文详解
29 0
|
10天前
|
机器学习/深度学习 数据采集 人工智能
【专栏】利用AI辅助工具提高软件测试效率与准确性
【4月更文挑战第27天】本文探讨了AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计。AI辅助工具利用机器学习、自然语言处理和图像识别提高效率,但面临数据质量、模型解释性、维护更新及安全性挑战。未来,AI将更注重用户体验,提升透明度,并在保护隐私的同时,通过联邦学习等技术共享知识。AI在软件测试领域的前景广阔,但需解决现有挑战。