首页 > 数据库 >MySQL的主从复制之异步复制的简单实现

MySQL的主从复制之异步复制的简单实现

时间:2023-05-20 19:35:19浏览次数:33  
标签:异步 主从复制 slave MySQL master mysql MASTER root

(文章目录)


前言

MySQL异步复制是MySQL数据库中的一种数据复制方式,主要用于在多个MySQL实例之间复制数据。与同步复制不同,异步复制并不要求每个MySQL实例都必须立即接收新数据的更新。相反,更新在主MySQL实例上执行后,异步地传输给从MySQL实例,所以数据的同步可能需要花费一定的时间。

异步复制的特点

MySQL异步复制具有以下特点:

1.高可用性:当主MySQL实例出现故障时,从实例可以自动接管读写操作,提高了整个系统的可用性。

2.节省带宽:由于更新在主MySQL实例上异步传输,因此从实例不需要立即接收新的更新。这意味着可以控制从实例接收更新的速度,从而节省了带宽和网络资源。

3.较低的延迟:尽管异步复制存在一些延迟,但通常不会对系统的性能造成太大影响。在许多情况下,异步复制比同步复制更快。

4.灵活性:MySQL异步复制支持多个从MySQL实例,并且可以根据需求配置不同的复制拓扑结构,例如环形、星形或链式结构。

实验目的

在两台mysql服务器上实现基础的异步复制

实验步骤

一、准备一台mysql从服务器,安装好mysql,mysql版本最好一致,不建议直接克隆主服务器

二、将主服务器的数据复制到从服务器

master:

先通过mysqldump将master目前的数据导出再通过scp发送到从服务器上

[root@master mysql]# mkdir /backup
[root@master mysql]# mysqldump -uroot -p'Zh_000000' --all-databases >/backup/all_db.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@master mysql]# scp /backup/all_db.sql 192.168.10.148:/root
The authenticity of host '192.168.10.148 (192.168.10.148)' can't be established.
ECDSA key fingerprint is SHA256:R2xbX1mlnOg+W2ULu+xpsbHcAd1PIBCeQAuxCJDka4Q.
ECDSA key fingerprint is MD5:a9:47:3b:77:ea:16:3f:16:b6:91:a7:e8:ba:a5:fa:3e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.148' (ECDSA) to the list of known hosts.
[email protected]'s password: 
all_db.sql                                                                                   100%  867KB  46.7MB/s   00:00    

slave:

在slave上导入数据

root@(none) 15:58  mysql>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
[root@slave ~]# mysql -uroot -p'Zh_000000' <all_db.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
root@(none) 16:05  mysql>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hunan              |
| my_database        |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
| zh001              |
+--------------------+
8 rows in set (0.01 sec)

三、确保master开启二进制日志,slave可以不开启,但需要指定server_id

master:

[root@master mysql]# vim /etc/my.cnf
[mysqld]
# binlog
log_bin
server_id = 1
[root@master ~]# service mysqld restart

slave:

[root@slave ~]# vi /etc/my.cnf
[mysqld]
# slave_id
server_id = 2
[root@slave ~]# service mysqld restart

四、在master上创建一个可以有复制权限的授权用户

slave可以通过该用户到master服务器里来复制二进制日志

master:

创建并授权一个新用户

root@(none) 16:23  mysql>grant replication slave on *.* to 'zhi'@'192.168.10.%' identified by 'Zh_000000';
Query OK, 0 rows affected, 1 warning (0.00 sec)

主机部分如果考虑安全性可以只指定单个ip,我这里直接指定了当前的网段

五、在slave上添加授权用户的信息

slave:

根据自己的设置情况在mysql中执行下面的语句:

CHANGE MASTER TO MASTER_HOST='192.168.10.146',	# master主机
 MASTER_USER='zhi',		# master授权的slave用户
 MASTER_PASSWORD='Zh_000000',
 MASTER_PORT=3306,		# master的mysqld端口
 MASTER_LOG_FILE='master-bin.000001',	# master当前使用的二进制日志名
 MASTER_LOG_POS=154;	# 即当前的位置号

可以在master上使用下面的命令查看当前日志名和位置号:

root@(none) 16:37  mysql>show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      154 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

执行:

root@(none) 16:40  mysql>CHANGE MASTER TO MASTER_HOST='192.168.10.146',
    ->  MASTER_USER='zhi',
    ->  MASTER_PASSWORD='Zh_000000',
    ->  MASTER_PORT=3306,
    ->  MASTER_LOG_FILE='master-bin.000001',
    ->  MASTER_LOG_POS=154;
Query OK, 0 rows affected, 2 warnings (0.02 sec)	# 执行不成功要查看信息是否打错,或者检查防火墙

使用命令查看slave状态信息:

root@(none) 16:43  mysql>show slave status\G;		# 返回结果从开头截取了一部分
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.10.146
                  Master_User: zhi
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: localhost-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: No	# 因为还没启动slave,所以这两个进程还没启动
            Slave_SQL_Running: No

六、启动slave角色

slave:

# 启动slave服务
root@(none) 16:43  mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
# 再次查看slave状态
root@(none) 16:44  mysql>show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.146
                  Master_User: zhi
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001	# 从服务器已经处理的最后一个二进制日志文件
          Read_Master_Log_Pos: 154	# 最后处理的位置号
               Relay_Log_File: localhost-relay-bin.000002
                Relay_Log_Pos: 321
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

七、验证主从复制数据是否同步

master:

root@zh001 16:51  mysql>create table t5(id int,name varchar(10),age tinyint);
Query OK, 0 rows affected (0.01 sec)

root@zh001 16:53  mysql>insert into t5(id,name,age) values(101,'只何',18);
Query OK, 1 row affected (0.00 sec)

root@zh001 16:53  mysql>select * from t5;
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|  101 | 只何   |   18 |
+------+--------+------+
1 row in set (0.00 sec)

slave:

root@(none) 16:44  mysql>select * from zh001.t5;
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|  101 | 只何   |   18 |
+------+--------+------+
1 row in set (0.01 sec)

可以看到在master上执行建表和插入数据后在slave上立马就能同步数据,实验结束

总结

MySQL异步复制是一种灵活、高可用性和低延迟的数据复制方式,可以满足大多数应用程序的需求。本文只是简单实现,异步复制需要更多的配置才能更好的应对多种业务请求,并且需要注意的是,在异步复制中,可能存在数据丢失的风险,因此需要仔细考虑数据库的可靠性和数据安全性。

标签:异步,主从复制,slave,MySQL,master,mysql,MASTER,root
From: https://blog.51cto.com/u_16077445/6317729

相关文章

  • 报错 libmysqlclient.so.20: cannot open shared object file: No such file or direc
    1背景环境:centos7,c++程序最近在重新部署一个老软件都时候遇到libmysqlclient.so.20:cannotopensharedobjectfile:Nosuchfileordirectory错误,这是提示缺失mysql的连接文件2解决方法错误提示已经很明显了,那就缺啥补啥,找一台装过mysql的机器查找此文件[root@localh......
  • Windows 2007卸载mysql数据库
    文档课题:Windows2007卸载mysql数据库.系统:windows2007专业版数据库:mysql5.5.621、关闭服务--在service服务中关闭MySQL服务,如下所示:2、卸载MySQL服务--在控制面板删除MySQL程序.3、删除相关文件夹--删除mysql在电脑硬盘上所有文件,位置C:\ProgramFiles\MySQL.--删除C:\Pro......
  • Mysql基础
    查询简单查询查询单个字段select字段名from表名;查询多个字段select字段名1,字段名2,...from表名;查询所有字段select*from表名;注:企业开发中不建议使用*进行所有字段的查询。1、效率低2、可读性差更改查询结果的列名select原列名as新列名fr......
  • 碧圈异步交易平台AsyncAlgoTrading学习笔记一:下载与编译
    下载无exe或Linux二进制,需源码编译安装GitHub地址:https://github.com/AsyncAlgoTrading/aat.git编译运行环境ubuntu20.04python3.8.10编译1.将Makefile中的PYTHON=python改为PYTHON=python32.安装必要的依赖:(1)sudoapt-getinstallpython3-dev(2)sudoapt-getinstallbui......
  • 同一局域网下,远程连接另一台电脑的Mysql数据库
    博客地址:https://www.cnblogs.com/zylyehuo/参考链接同一局域网,远程连接别人的Mysql数据库用电脑A去远程电脑B的数据库,那我们要先在电脑B上设置一下:step1:打开电脑B的数据库电脑B打开cmd,输入mysql-uroot-p,回车,输入mysql的密码,回车step2:为电脑A创建账号依次......
  • MySQL查询重复数据
    工作中我们经常会遇到查询数据表中重复数据的需求,可以用count、groupby、having实现,将要查重复的字段进行分组,并计算每个字段出现的次数,最后使用having查询出现次数大于0的数据。示例SQL如下:SELECT phone, count(phone)FROM `user`GROUPBY phoneHAVING count(phon......
  • Mac 删除MySQL后仍然有MySQL进程且杀不掉
    如图解决方案ps-ef|grepmysql|grep-vgrep那个其实是grep进程,真正的mysql进程已经被杀掉了。并且那一行也有grep这个词。......
  • Mysql ALTER TABLE 加字段的时候到底锁不锁表?
    Mysql5.6版本之前更新步骤对原始表加写锁按照原始表和执行语句的定义,重新定义一个空的临时表。对临时表进行添加索引(如果有)。再将原始表中的数据逐条Copy到临时表中。当原始表中的所有记录都被Copy临时表后,将原始表进行删除。再将临时表命名为原始表表名。这样的话整个DDL......
  • 【若依框架】定时任务调用异步服务,实现每天定时发送钉钉消息通知
     https://blog.csdn.net/MS_SONG/article/details/129141498【若依框架】定时任务调用异步服务,实现每天定时发送钉钉消息通知后端实现思路实现步骤1.添加依赖2.配置DingTalkUtils工具类3.设置定时任务4.异步任务-发送钉钉消息5.配置白名单代码 后端实......
  • 记录一次windows mysql5.7安装失败的过程
    首先下载mysql安装包windows版本 https://dev.mysql.com/downloads/installer/接着在执行安装mysqlmsi安装包最后一步的时候,显示FailedtostartserviceMySQL57.只有在任务处于完成状态(RanToCompletion、Fau这时候检查要么windows下面mysql的卸载残留没清理干净,要......