centos8平台搭建mysql8数据库主从同步
一,两台服务器的规划
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数据库主从同步的更多相关文章
- 搭建 mariadb 数据库主从同步
一.主(master)数据库配置 1. my.cnf 添加配置 [mariadb] log-bin server_id=1 log-basename=master1 binlog-format=mix ...
- 【MongoDB】windows平台搭建Mongo数据库复制集(类似集群)(转)
原文链接:[MongoDB]windows平台搭建Mongo数据库复制集(类似集群)(一) Replica Sets(复制集)是在mongodDB1.6版本开始新增的功能,它可以实现故障自动切换和自 ...
- MySQL-5.7数据库主从同步实战教程
主从形式 MySQ主从复制原理(主库写入数据,从库读取数据) MySql常用命令: MySQL5.7设置密码 ') where user='root': MySQL5.6设置密码 ') WHERE U ...
- 【MongoDB】windows平台搭建Mongo数据库复制集(相似集群)(三)
关于windows平台搭建Mongo数据库复制集这个话题,我已经在前面写了两篇博客 第一篇: 怎样在windows平台搭建Mongo数据库复制集 第二篇: 数据同步和故障自适应測试 在本篇里面,咱们重 ...
- mysql数据库主从同步
环境: Mater: CentOS7.1 5.5.52-MariaDB 192.168.108.133 Slave: CentOS7.1 5.5.52-MariaDB 192.168. ...
- [记录]CentOS搭建SVN服务器(主从同步)
CentOS搭建SVN服务器(主从同步)1.安装步骤如下: 1)安装: #yum install subversion 2)查看安装位置: #rpm -ql subversion 3)查看版本: #/ ...
- mysql数据库主从同步读写分离(一)主从同步
1.mysql数据库主从同步读写分离 1.1.主要解决的生产问题 1.2.原理 a.为什么需要读写分离? 一台服务器满足不了访问需要.数据的访问基本都是2-8原则. b.怎么做? 不往从服务器去写了 ...
- MySQL数据库主从同步延迟分析及解决方案
一.MySQL的数据库主从复制原理 MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示: 分为四步走: 1. 主库对所有DDL和DML产生的日志写进binlog: 2. 主库生成一个 lo ...
- Linux下MySQL数据库主从同步配置
说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备 ...
随机推荐
- python中函数的参数:必传参数(位置参数)、默认值参数、参数组传参、关键字传参
1.必传参数也叫做位置参数,因为必填,也必须对应位置 2.默认值参数如上图的word 3.参数组参数:传进去的是0个.或多个value的形式,,,和位置参数有点像,只传value值,但是没有限制个数 ...
- ftp被动模式下 ftp_put 上传文件
参考地址:https://blog.csdn.net/liuhelong12/article/details/50218311
- 软件定义网络(SDN)第二次实验报告
目录 实验 2 :Mininet 实验--拓扑的命令脚本生成 一.实验目的 二.实验任务 三.实验要求 四.具体实验步骤 引导实验 Part 1 引导实验 Part 2 本周实验任务完成流程 五.注意 ...
- python变量及简单数据类型
python 目录 python 1.变量 1.变量的定义 2.变量的命名 3. 关键字 4.变量的命名规则 5.变量的类型 5.不同类型变量之间的计算 6.变量的输入 7.变量的格式化输出 8.格式 ...
- javac中不引人注目的编码小坑
来看下面这段java程序: public class Test{ public static void main(String[] args){ System.out.println("哈哈 ...
- 关于MongoDB
启动: 启动MongoDB的方式有两种: 1.直接启动,配置参数写在命令中: mongod --dbpath=data/db --logpath=log/log.txt --fork 2.以配置文件启 ...
- 【Netty之旅四】你一定看得懂的Netty客户端启动源码分析!
前言 前面小飞已经讲解了NIO和Netty服务端启动,这一讲是Client的启动过程. 源码系列的文章依旧还是遵循大白话+画图的风格来讲解,本文Netty源码及以后的文章版本都基于:4.1.22.Fi ...
- powershell中使用Get-FileHash计算文件的hash值
今天在公司一台windows服务器上.需要对两个文件进行比对,笔者首先就想到了可以使用md5校验 但是公司服务器上又不可以随意安装软件,于是笔者想到了可以试试windows自带的powershell中 ...
- 吴恩达Machine Learning学习笔记(二)--多变量线性回归
回归任务 多变量线性回归 公式 h为假设,theta为模型参数(代表了特征的权重),x为特征的值 参数更新 梯度下降算法 影响梯度下降算法的因素 (1)加速梯度下降:通过让每一个输入值大致在相同的范围 ...
- Pycharm默认输入状态是insert状态,选中文字无法直接输入替换或删除
最近在学习Python,使用pycharm的时候,我的光标处于加粗状态,也就是编程软件经常出现的insert插入编辑模式,我就点击了一下insert按键,退出了这个模式,但是我每次打开都是会处于这种模 ...