Mysql的主从同步一直只停留在了解的表面上,以后或许用的到,所以准备实践下,大概学习了下同步的原理.

一 Mysql主从同步原理

Mysql的同步原理比较简单. 主服务器打开binlog日志,从服务器通过IO线程从主服务器上读取binlog日志保存为中继日志,从服务器的SQL线程再回放日志,应用到从服务器上,从而实现数据的同步.

如下图:

简单来说:

  1. 先建立账号, 用于数据的同步;

  2. 锁定主库,目的是防止主库修改,这时候进行全量的数据备份,将备份的数据在备份库恢复.

  3. 开启binlog日志,解锁主库.

  4. 这时候在主库上的操作会记录在binlog日志中.

  5. 我们在从库上设置好同步的主库信息,从库上的IO线程拉取binlog日志

  6. 从库上回放binlog日志,这样就达到了从库同步主库的目的了.

二 实践

2.1 安装mariadb 【会存在同步问题】

条件首先有两台Mysql服务器. 我先安装吧,用的机器的系统是centos7.5的,默认的yum源安装的mariadb版本是5.x的,想安装最新的,配置下阿里源:

cd /etc/yum.repos.d
vim  MariaDB.repo
添加以下内容[mariadb]
name=MariaDB
baseurl=http://mirrors.aliyun.com/mariadb/yum/10.3/centos7-amd64/
gpgkey=http://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

更新源缓存:··· yum clean all yum makecache ··· 安装Mariadb数据库:

yum install MariaDB-server MariaDB-client

启动数据库:

systemctl start mariadb #启动服务

设置开机启动

systemctl enable mariadb

systemctl 常用命令:

systemctl enable mariadb #设置开机启动 systemctl restart mariadb #重新启动 systemctl stop mariadb.service #停止MariaDB

设置密码:

mysql_secure_installation

这里面首先要输入root原来的密码,即空的,直接打入回车,然后输入两次root密码,并删除些test数据库,禁止远程登录root等。

2.2 主数据库配置

新建用户和授权:

CREATE USER 'slave1'@'localhost' IDENTIFIED BY '1ABCqwe345^';
update user set host='%' where user='slave1';
grant replication slave on *.* to 'slave1'@'%';
flush privileges;

开启binlog日志:vim /etc/my.conf

[mysqld]
server-id=1
log-bin="master-bin"

重启数据库:

service mysqld restart

导出数据库备份:

 mysqldump -uroot -p --single-transaction --flush-logs --master-data --all-databases > all.sql

2.3 从库配置参数

[mysqld]
server-id = 2
#read_only = 1
#relay_log = /var/log/mariadb/relay.log
replicate-do-db=xxx
replicate-do-db=yyy

说明:

relay_log 配置中继日志 log-slave-updates 表示slave将复制事件写进自己的二进制日志,简单地说,如果从库同时作为其它库的主库,那么需要添加该参数,否则不需要 read_only 它防止改变数据 replicate-do-db 要同步的数据库

加载数据库文件

mysql -uroot -p
xxx
mysql > source /root/all.sql

在主数据库上执行(这一步在主导出数据库后就执行)

mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000002 |      155 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+

在从服务器上设置同步参数:

mysql>change master to master_host='47.xx.xx.xx',master_user='slave1',master_password='1ABCqwe345^',master_log_file='master-bin.000002',master_log_pos=155;  mysql>start slave;

查看同步结果:

mysql> show slave status;

后面发现有问题,主是mysql的8.0.x版本,从是mariadb的版本,换下:重新安装mysql8的版本:

wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
yum install mysql80-community-release-el7-3.noarch.rpm
yum install yum-utils -y
yum-config-manager --disable mysql57-community
yum-config-manager --enable mysql80-community
yum install mysql-community-server #启动
systemctl start mysqld         #查密码
[root@VM-0-2-centos lib]#  grep 'temporary password' /var/log/mysqld.log
2021-07-25T07:31:53.643365Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: mmlS;r&O!2aq#mysql -uroot -p
#ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!'; 

再次按照上述同步设置:

mysql> show slave status\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 47.xx.xx.xxMaster_User: slave1Master_Port: 3306Connect_Retry: 60Master_Log_File: master-bin.000003Read_Master_Log_Pos: 155Relay_Log_File: VM-0-2-centos-relay-bin.000004Relay_Log_Pos: 372Relay_Master_Log_File: master-bin.000003Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: mdpt,lmsReplicate_Ignore_DB: Replicate_Do_Table: 

终于同步好了,测试下,结果的ok的。这记录的是很基础的东东,同步还有异步同步,半同步等多种方式,同步的参数也有很多,这里面就节省了。

但是这里面有个重要问题,就是如果主的数据被删除,数据立刻同步到备数据库,失去了意义,我们如果只是做备份,对数据的实时性并没有什么要求,可以设置以下命令:在从数据库下执行:

mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)mysql> CHANGE MASTER TO master_delay = 3600;
Query OK, 0 rows affected, 2 warnings (0.04 sec)mysql> start slave;

这样从数据库就延迟1个小时从主数据库同步数据,好处是防止主数据的误删除。如果要保证数据的一致性和crash safe,可以添加如下配置:

gtid_mode = on
enforce_gtid_consistency = 1
binlog_gtid_simple_recovery = 1
relay_log_recovery = ON
master_info_repository = TABLE
relay_log_info_repository = TABLE

不过没尝试过。

三 参考

mysql安装mysql主从同步

四 诗词欣赏

# 兰亭集序[【作者】王羲之 ] 【朝代】魏晋永和九年,岁在癸丑,暮春之初,会于会稽山阴之兰亭,修禊事也。
群贤毕至,少长咸集。
此地有崇山峻岭,茂林修竹,又有清流激湍,映带左右,引以为流觞曲水,列坐其次。
虽无丝竹管弦之盛,一觞一咏,亦足以畅叙幽情。是日也,天朗气清,惠风和畅。仰观宇宙之大,俯察品类之盛,所以游目骋怀,足以极视听之娱,信可乐也。夫人之相与,俯仰一世。
或取诸怀抱,悟言一室之内;或因寄所托,放浪形骸之外。虽趣舍万殊,静躁不同,当其欣于所遇,暂得于己,快然自足,不知老之将至;及其所之既倦,情随事迁,感慨系之矣。
向之所欣,俯仰之间,已为陈迹,犹不能不以之兴怀,况修短随化,终期于尽!古人云:“死生亦大矣。”岂不痛哉!每览昔人兴感之由,若合一契,未尝不临文嗟悼,不能喻之于怀。固知一死生为虚诞,齐彭殇为妄作。后之视今,亦犹今之视昔,悲夫!故列叙时人,录其所述,虽世殊事异,所以兴怀,其致一也。后之览者,亦将有感于斯文。

Mysql8.x主从基础同步相关推荐

  1. windows配置mysql8.0主从数据库,主从数据同步。

    本地配置两个mysql8.0数据库用作主从数据库,同一个服务器安装多个mysql服务,只要端口不一样. 1.下载安装包 mysql下载地址:https://dev.mysql.com/download ...

  2. Mysql8.0主从配置

    Mysql8.0主从配置 一.环境准备 1. 启动mysql服务 2. 配置文件 二.主从设置 1. 主库(数据源)设置 1.1 将主库数据快照导入从库(如果不需要导入,则跳过此过程) 1.2 进入主 ...

  3. Linux设备配置DNS服务器,实现正向解析和反向解析,实现DNS主从服务器同步,实现批量域名正/反向解析

    本文基于Linux上CentOS 7版本配合bind(named)服务进行演示 一.DNS域名服务器原理及作用等介绍 1.DNS简介: 2.原理简单介绍 3.常见域名后缀 4.DNS域名服务器类型 5 ...

  4. Postgres主从数据同步

    目录 Postgres数据备份的三种方式及比较... 1 ① Archive. 1 ② 流复制... 1 ③ 逻辑复制... 1 流复制... 1 ① 原理... 1 ② 配置... 3 1. 修改主 ...

  5. 生产环境主从数据同步不了?

    生产环境主从数据同步不了? 经历过程: 一般我们常常在做主从复制的时候,可能是很少遇到到错误,那都是因为,你做主从基本用的是,本地虚拟机做,或者一些测试环境做.但是当我们把主从复制部署到生成环境就出问 ...

  6. MySQL主从数据库同步延迟问题解决

    MySQL主从数据库同步延迟问题 摘要: MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响 ...

  7. SQL Server主从数据库同步方式及同步问题解决方案总结

    SQL Server主从数据库同步方式及同步问题解决方案总结 参考文章: (1)SQL Server主从数据库同步方式及同步问题解决方案总结 (2)https://www.cnblogs.com/zh ...

  8. Mysql5.7的gtid主从半同步复制和组复制

    (一)gtid主从半同步复制 一.半同步复制原理 mysql默认的复制是异步的,主库在执行完客户端提交的事务后会立即将结果返回给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主库如果cr ...

  9. mysql主从不同步怎么恢复_mysql主从不同步时,怎么恢复

    mysql主从不同步时,怎么恢复 Mysql的主从数据库没有同步 先上Master库: mysql>show processlist;   查看下进程是否Sleep太多.发现很正常. show  ...

  10. mysql主从同步默认延迟_减少mysql主从数据同步延迟问题的详解

    基于局域网的master/slave机制在通常情况下已经可以满足'实时'备份的要求了.如果延迟比较大,就先确认以下几个因素: 1. 网络延迟 2. master负载 3. slave负载 一般的做法是 ...

最新文章

  1. Abaqus用户子程序umat的学习
  2. 漫画:程序教你寻找股票买入卖出的最佳时机(动态规划)
  3. 在国内安装Pytorchy以及遇到的问题
  4. java开发需要掌握哪些东西_java开发需要掌握哪些技能
  5. 本科是学计算机研究生学教育学,教育学研究生好考吗?
  6. python封装工具类多个项目使用_【arcpy项目实战】将多个点两两生成的最短路径pyhon代码封装入script中...
  7. Bash脚本教程之行操作
  8. python中metaclass的理解
  9. 误删除 linux 系统文件了?这个方法教你解决
  10. httpcliet发送body体_解决HTTP GET方法调用带有body问题
  11. 图像定位的优化、评价和应用简介
  12. zk 02之 Windows安装和使用zookeeper
  13. Rust: 用于量化研究的尝试探讨
  14. 基于java springboot 活动报名微信小程序源码
  15. 测试创新——用户体验测试(UAT)
  16. Springboot学习-MD5盐值密码加密 DigestUtils 和 BCryptPasswordEncoder
  17. 此数据库处于单用户模式,当前某个用户已与其连接。 ALTER DATABASE 语句失败。 (Microsoft SQL Server,错误: 5064)...
  18. 2050年这些职业将逐渐被AI(人工智能)取代
  19. 老李分享:《Java Performance》笔记2——JVM命令行选项及垃圾收集日志解析 2
  20. Appium基础 — uiautomatorviewer定位工具

热门文章

  1. extmail mysql数据库 重启_Extmail邮件服务器部署
  2. Unity Easy AR
  3. Kindle Touch 5.3.7上手使用指南
  4. micropython入门 stm32_STM32F4系列使用MicroPython开发
  5. sqlldr的用法详解
  6. MUI框架默认全局不可复制
  7. 捷宇高拍仪D系列 javaweb集成进项目
  8. Linux虚拟机网络配置
  9. 计算机系统更新从哪关闭,电脑总提示系统更新,怎么关闭?
  10. PX4开源软件框架简明简介