一,两台服务器的规划

    a服务器:主机名:yjweb  ip: 121.122.123.47        角色:主库      server-id:1

    j服务器:主机名: os3   ip:  121.122.123.134       角色:从库      server-id:2

说明:1,主库上此前已经存在有数据,我们要把数据导出

2,我们只有一个库需要同步:数据库名称:meet

3,  mysql数据库的版本:8.0.19,

注意要尽量保持两台数据库的版本一致,主库尽量不要高于从库的版本

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

对应的源码可以访问这里获取: https://github.com/liuhongdi/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,主库:查看配置文件,确保可以做主从同步:

[root@yjweb ~]$ more /etc/my.cnf 

有两个关键配置项:

server-id = 1

log-bin = /data/mysql/binlog/mysql-bin

说明:主库的server-id要和从库的server-id区分开,

主库要做log-bin,二进制日志用来供主从复制时使用

说明:因为mysql8中,binlog_format 变量的默认值是row,

我们不再手动声明这个配置变量

三,主库:创建同步账号

说明:这个账号是供从库从来访问主库的,所以'backup'@'121.122.123.134',ip是从库的ip

[root@yjweb ~]# /usr/local/soft/mysql/bin/mysql -u root -p

1,创建一个同步账号,并授权:

mysql> create user 'backup'@'121.122.123.134' identified by 'backuppassword';
Query OK, 0 rows affected (0.00 sec) mysql> grant replication slave on *.* to backup@121.122.123.134;
Query OK, 0 rows affected (0.00 sec)

2,检查创建是否成功?

mysql> select * from mysql.user where User='backup';

3,检查当前用户获得的授权

mysql> show grants for backup@121.122.123.134;
+--------------------------------------------------------------+
| Grants for backup@121.122.123.134 |
+--------------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO `backup`@`121.122.123.134` |
+--------------------------------------------------------------+
1 row in set (0.00 sec)

4,使新建账号生效

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

四,主库:导出待同步数据库中的数据

说明:除了把数据导出,重点是记录下主库当前的日志位置

1,加全局的读锁,避免在导数据时有写操作

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)

2,查看当前的日志文件和位置,并记录下来

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000014 | 55813 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

3,另开一个终端,导出需要同步的数据库的数据

[root@yjweb ~]# /usr/local/soft/mysql/bin/mysqldump --port=3306 -u root -prootpassword --databases meet --lock-tables=false --> /root/meet.sql

说明:导出的数据文件需要上传到从库所在的服务器

4,回到刚才所在的mysql终端:解除锁定:

mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)

五,  主库:检查防火墙配置

[root@yjweb ~]# firewall-cmd --list-all

检查是否已经把从库的ip加入到防火墙

例如:

 rich rules:
rule family="ipv4" source address="121.122.123.134" accept

六,从库:导入数据

1,关掉web服务,避免有访问进入

[root@os3 ~]# systemctl stop nginx

2,如果当前存在同步数据库,先删除数据

mysql> drop database meet;
Query OK, 19 rows affected (0.24 sec)

3,导入数据

把主库上导出的sql文件复制到从库上(这一步是在主库上执行)

[root@yjweb ~]# scp ./meet.sql root@121.122.123.134:/root/ 

从库上,执行导入

[root@os3 conf]# /data/software/mysql/bin/mysql --host=127.0.0.1 --port=3306 -u root -prootpassword < /root/meet.sql

七,从库:配置主从

[root@os3 ~]# vi /etc/my.cnf

主要配置以下各项:

server-id = 2
replicate-do-db = meet
read_only = 1

说明:replicate-do-db   用来指定要复制的数据库

read_only    普通用户(非root)访问时只有只读的权限,不能做写操作

说明:修改my.cnf配置文件完成后,不要忘记重启mysql数据库服务,

使配置生效,否则会报如下错误:

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; 
these ids must be different for replication to work
(or the --replicate-same-server-id option must be used on slave but this does not always make sense;
please check the manual before using it)

八,从库:执行同步:

停止从库同步

mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

配置连接到主库的信息

mysql> change master to master_host='121.122.123.47',master_port=3306,master_user='backup',master_password='backuppassword',master_log_file='mysql-bin.000014',master_log_pos=55813;
Query OK, 0 rows affected, 1 warning (0.03 sec)

开启从库同步

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

九,从库:检查同步情况

1,查看从库的状态

mysql> show slave status;

重点看这两项:

Slave_IO_Running | Slave_SQL_Running

这两项必须是

 Yes              | Yes

2,可以主库上发生update或insert修改后,在从库查看是否修改是否已生效

说明:以上mysql的主从同步搭建已完成 ,后面是附加的信息

十,show slave status主从同步情况的信息解读:

1,查看主库的信息:

Master_Host:#主库服务器地址

Master_User:#用来访问主库的用户名

Master_Port:#主库mysqld的端口

2,Slave_IO_Running 和Slave_SQL_Running两个线程的状态

Slave_IO线程负责把主库的bin日志(Master_Log)内容,投递到从库的中继日志上(Relay_Log)。

Slave_SQL线程负责把中继日志上的语句在从库上执行一遍。

Yes表示正常,No表示异常.

如果两个线程的状态都是yes,表示同步正常,

如果有一项是no,此时注意查看以下四项:

Last_IO_Error 保存了发生io错误的原因

Last_IO_Error_Timestamp 记录了发生io错误的时间

Last_SQL_Error 保存了发生sql错误的原因

Last_SQL_Error_Timestamp 记录了发生sql错误的时间

 

3,如何判断主从同步的差距?

Master_Log_File  # I/O线程当前正在读取的主服务器二进制额日志文件的名称

Relay_Master_Log_File  #由SQL线程执行的同步的主服务器二进制日志文件的名称

如果以上两个文件名相同,则表示读取和执行的是同一个二进制文件

 

Read_Master_Log_Pos: #在当前的主服务器二进制日志中,I/O线程正在读取的位置

Exec_Master_Log_Pos:#来自主服务器的二进制日志的由SQL线程执行的上一个时间的位置

如果以上两个位置的数字相同则表示读取和执行的进度完全同步

4,Replicate_Do_DB :此处是同步的数据库的名字

5,  Slave_IO_State:显示为wait ,例如:Waiting for master to send event

表示relay日志中的sql语句已经全部执行完毕

6,Seconds_Behind_Master:

slave的SQL线程与I/O线程的时间差

如果两台机器之间网络较差,有可能这个值很低,

但从库上的同步落后主库较多,

所以不能完全依据它来判断同步的情况

十一,三种二进制日志格式的含义:

binlog的格式有三种:STATEMENT,ROW,MIXED。

1,STATEMENT模式(SBR)

每一条会修改数据的sql语句会记录到binlog中。

优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。

缺点是有可能会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)

2,ROW模式(RBR)

不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。

优点:不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。

缺点:会产生大量的日志,尤其是alter table的时候会让日志暴涨。

3, MIXED模式(MBR)

以上两种模式的混合使用,

一般的复制使用STATEMENT模式保存binlog,

对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,

MySQL会根据执行的SQL语句选择日志保存方式。

说明:row格式最安全,目前也是mysql8的默认格式

十二,查看mysql数据库的版本和centos的版本:

[root@yjweb ~]# /usr/local/soft/mysql/bin/mysqld -V
/usr/local/soft/mysql/bin/mysqld Ver 8.0.19 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)
[root@yjweb ~]# cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)

centos8平台搭建mysql8数据库主从同步的更多相关文章

  1. 搭建 mariadb 数据库主从同步

    一.主(master)数据库配置 1. my.cnf 添加配置 [mariadb] log-bin server_id=1 log-basename=master1 binlog-format=mix ...

  2. 【MongoDB】windows平台搭建Mongo数据库复制集(类似集群)(转)

    原文链接:[MongoDB]windows平台搭建Mongo数据库复制集(类似集群)(一) Replica  Sets(复制集)是在mongodDB1.6版本开始新增的功能,它可以实现故障自动切换和自 ...

  3. MySQL-5.7数据库主从同步实战教程

    主从形式 MySQ主从复制原理(主库写入数据,从库读取数据) MySql常用命令: MySQL5.7设置密码 ') where user='root': MySQL5.6设置密码 ') WHERE U ...

  4. 【MongoDB】windows平台搭建Mongo数据库复制集(相似集群)(三)

    关于windows平台搭建Mongo数据库复制集这个话题,我已经在前面写了两篇博客 第一篇: 怎样在windows平台搭建Mongo数据库复制集 第二篇: 数据同步和故障自适应測试 在本篇里面,咱们重 ...

  5. mysql数据库主从同步

    环境: Mater:   CentOS7.1  5.5.52-MariaDB  192.168.108.133 Slave:   CentOS7.1  5.5.52-MariaDB  192.168. ...

  6. [记录]CentOS搭建SVN服务器(主从同步)

    CentOS搭建SVN服务器(主从同步)1.安装步骤如下: 1)安装: #yum install subversion 2)查看安装位置: #rpm -ql subversion 3)查看版本: #/ ...

  7. mysql数据库主从同步读写分离(一)主从同步

    1.mysql数据库主从同步读写分离 1.1.主要解决的生产问题 1.2.原理 a.为什么需要读写分离? 一台服务器满足不了访问需要.数据的访问基本都是2-8原则. b.怎么做?  不往从服务器去写了 ...

  8. MySQL数据库主从同步延迟分析及解决方案

    一.MySQL的数据库主从复制原理 MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示: 分为四步走: 1. 主库对所有DDL和DML产生的日志写进binlog: 2. 主库生成一个 lo ...

  9. Linux下MySQL数据库主从同步配置

    说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备 ...

随机推荐

  1. IIS实现Nginx功能:转发

    这个标题本身是不合理的,但是基于目前公司有一份系统是外部代理商贴牌使用,有一个老的站点是部署在IIS上,好多代理商自己的域名绑定在这个上面,而近期新版本的系统已经上线,那么需要将这些域名也转发到新的站 ...

  2. Java中“==”和 equals的区别

    “==”的作用: 判断两个变量栈内存中存储的值是否相等,如果相等返回true,如果不相等返回false. 有两种形式的比较需要用到比较运算符“==”,一是两个基本数据类型之间的比较,二是两个引用数据类 ...

  3. nioServerChannel的的状态

    转载自https://blog.csdn.net/zxhoo/article/details/17964353 Channel继承层次图分析上面提到的三个状态的时候,会去看Channel继承层次里某些 ...

  4. 现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?

    Thread t1 = new Thread(new T1()); Thread t2 = new Thread(new T2()); Thread t3 = new Thread(new T3()) ...

  5. 实战Docker容器调度

    目录 一.前言 二.Docker Compose 2.1.简介 2.2.下载安装 2.3.小实验 2.4.小实验的细节 2.5.Compose file的编写规则 三.Docker Swarm 3.1 ...

  6. Asp.Net Core 选项模式的三种注入方式

    前言 记录下最近在成都的面试题, 选项模式的热更新, 没答上来 正文 选项模式的依赖注入共有三种接口, 分别是 IOptions<>, IOptionsSnapshot<>, ...

  7. 你还不会ES的CUD吗?

    近端时间在搬砖过程中对es进行了操作,但是对es查询文档不熟悉,所以这两周都在研究es,简略看了<Elasticsearch权威指南>,摸摸鱼又是一天. es是一款基于Lucene的实时分 ...

  8. http(Hyper Text Transfer Protocol)

    一.定义    http(Hyper Text Transfer Protocol):超文本传输协议二.作用    数据传输三.概念    HTTP消息:        1.客户端发向服务器的请求消息 ...

  9. Redis报错“ OOM command not allowed when used memory > 'maxmemory' ”

    生产环境上遇到这个问题,控制台不停打印 "OOM command not allowed when used memory > 'maxmemory' "; 起初不知道是什么 ...

  10. SSRF漏洞(原理、漏洞利用、修复建议)

    介绍SSRF漏洞 SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞.一般情况下,SSRF攻击的目标是外网无法访问 ...