一. 理论部分

MySQL主从同步

主从同步使得数据可以从一个数据库服务器复制到其他的服务器上。在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。

因为复制是异步进行的,所以从服务器不需要一直连着主服务器,而是断断续续连接主服务器。

通过配置文件,可以实现所有数据库,指定数据库 ,指定数据库的表,进行复制。

主从同步的好处

通过增加从服务器来提高数据库的性能。主库执行写入和更新,从库执行读取,动态增加从服务器,提高数据库系统性能

提高数据的安全性。使用从服务器,备份数据库,而不破坏服务器上的数据

在主库生成数据,在从库分析数据,提高主库的性能

数据库复制

MySQL是异步复制,MySQL cluster是同步复制。有很多主从同步,但是核心的方法有两种:

Statement Based Replication(SBR) 基于SQL语句的复制

Row Based Replication(RBR) 基于行复制的

也可以使用Mixed Bases Replication(MBR) 混合复制

在MySQL5.6,默认使用SBR。而MySQL5.6.5及以后的版本,基于global transaction identifiters(GIDS)来进行事务复制。通过设置服务器的系统变量binog_format来指定要使用的格式

各机制的优缺

SBR 当使用二进制日志来实现主从复制时,主服务器把SQL语句写入到日志中,然后从服务器执行日志

优势:

​ 日志文件小

​ 记录所有语句,可以用于审计

劣势:

​ 使用一些函数的语句则不能进行复制

​ 在日志中出现警告信息则不能复制

RBR 主服务器把表的行变化作为事件写入二进制中,主服务器把代表行变化的事件复制到从服务器中

优势:

​ 所有数据变化都被复制,这是最安全的复制

​ 更少的行级锁表

劣势:

​ 日志很大

​ 不能通过日志来审计执行的SQL语句,不过可以使用mysqlbinlog

主从同步机制

​ MySQL服务器之间的主从同步是基于二进制的日志机制。主服务器使用日志变化来记录数据库变化记录,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致。

​ 主服务器和从服务器都必须配置一个唯一的ID号。另外从服务器需要通过change master to的语句来配置它要连接的主服务器和ip地址,日志文件名和该日志的位置(这些信息,均存放在主服务器的数据库里)

主从配置过程

主服务器操作:

修改配置文件,开启日志机制,配置独立的ID号

创建用于复制的账号,并授权给从服务器地址

show master status查看当前主机的日志信息和存放位置

从服务器操作:

修改配置文件,开启日志机制,配置独立的ID号

change master to语句,配置主服务器信息

start slave开启从服务器

show slave status查看从服务器状态

二. 实践部分

MySQL的主从同步配置方式,可以配置为:

一主一从

一主多从

下面的过程是配置一主一从的配置,一主多从的配置,只是修改从服务器的配置文件,其他过程和从服务器配置一样。

1. 两台虚拟机上部署MySQL

在node19 和node20上,分别创建和执行一下shell脚本

#!/bin/bash

if [ "$#" != "2" ];then

echo "scripts usage:$0 [hostname] [db_password]" && exit 0

fi

HOSTNAME=$1

PASSWORD=$2

# centos6

#yum -y install mysql mysql-server mysql-devel mysql-libs

# centos7

yum -y install mariadb mariadb-server maridb-clients mariadb-devel mariadb-libs

if [ "$?" == "0" ];then

#service mariadbd start 2>/dev/null && echo "start mysqld ok"

systemctl start mariadb 2>/dev/null && echo "start mysqld ok"

else

echo "yum mysql fail" && exit 0

fi

mysql <

delete from mysql.user where user = " " and host = "localhost";

delete from mysql.user where user = " " and host = "127.0.0.1";

delete from mysql.user where user = " " and host = "${HOSTNAME}";

delete from mysql.user where user = "root" and host = "${HOSTNAME}";

delete from mysql.user where user = "root" and host = "::1";

grant all privileges on *.* to 'root'@'localhost' identified by '${PASSWORD}';

grant all privileges on *.* to 'root'@'127.0.0.1' identified by '${PASSWORD}';

flush privileges;

EOF

systemctl enable mariadb

执行上述代码之后,两个节点上,均部署了MySQL(mariadb)服务

主服务器配置

在node19上,修改配置文件/etc/my.cnf,在[mysqld]的配置模块下,添加

log-bin=mysql-bin

server-id=1

执行systemctl restart mariadb重启MySQL服务器

mysql -uroot -p登陆数据库系统,执行一下语句

# 创建用于复制数据库的账号并授权

grant replication slave on *.* to 'repl'@'192.168.10.%' identifiedby 'liwanliang';

# 刷新数据库并设置只读

flush tables with read lock;

# 查看主服务器的状态,获取日志信息

show master status;

从服务器配置

在node20上,修改配置文件/etc/my.cnf,在[mysqld]的配置模块下,添加

log-bin=mysql-bin

server-id=2

执行systemctl restart mairadb重启服务器

mysql -uroot -p登陆数据库胸痛,执行以下语句

# 配置主服务器

change master to

master_host='192.168.10.19',

master_user='repl',

master_password='liwanliang',

master_log_file='mysql-bin.000001',

master_log_pos=552;

# 启动从服务器

start slave

# 查看状态

show slave status\G;

以上述操作过程,配置多个从服务器亦可实现

2. 使用从库进行数据库备份

在主库node19上创建数据库create database liwl_01;

在从库node20/node21上查看数据库show databases

暂停node20上的数据库复制,进行数据备份:mysqladmin -uroot -p stop-slave,或仅暂停SQL进程(此过程仅暂停SQL执行,而不暂停日志的复制),执行命令:mysql -uroot -p -e 'stop slave sql_thread';

在主库node19上创建数据库liwl_02,create databases liwl_02;

查看从库node21进行了复制,而node20上没有复制

在node20上重启复制进程:mysqladmin -uroot -p start-slave,查看到数据库已经同步过来

3. 有关数据库的备份

直接复制文件

为了保证数据的文件的完整性,在执行备份之前,应该关闭从服务器:

mysqladmin -uroot -p shutdown

拷贝数据库文件,然后启动MySQL服务

通过mysqldump复制

4. 主从复制可能存在的问题

主库宕机之后,数据可能丢失

​ 半同步复制,解决s数据丢失问题

从库只有一个SQL线程,主库写压力大时,复制可能存在延时

​ 并行复制,解决从库复制延迟问题

mysql主从同步配置超详细_MySQL主从同步配置相关推荐

  1. (转)Spring Boot 日志配置(超详细)

    转自:https://blog.csdn.net/inke88/article/details/75007649 ============================== Spring Boot- ...

  2. MySQL8.0.22安装及配置(超详细)

    MySQL8.0.22安装及配置(超详细) 大家好,今天我们来学习一下 MySQL8.0.22安装及配置,好好看,好好学,超详细的 第一步 进入MySQL官网下载,如下图所示: 第二步 进入下载完成后 ...

  3. Spring Boot 日志配置(超详细)

    Spring Boot-日志配置(超详细) 更新日志: 20170810 更新通过 application.yml传递参数到 logback 中. 简书不支持目录,截图一张. 默认日志 Logback ...

  4. post修改服务器数据源,postgresql安装及配置超详细教程

    1. 安装 根据业务需求选择版本,官网下载 初始化数据库 执行完初始化任务之后,postgresql 会自动创建和生成两个用户和一个数据库: linux 系统用户 postgres:管理数据库的系统用 ...

  5. 【多图超详细】从零开始安装配置Cuckoo sandbox并提交样本进行分析

    [多图超详细]从零开始安装配置Cuckoo sandbox并提交样本进行分析 文章目录 [多图超详细]从零开始安装配置Cuckoo sandbox并提交样本进行分析 1. 功能介绍 1.1主要功能 1 ...

  6. maven安装及配置(超详细)

    maven安装及配置(超详细) 大家好,今天我们来学习一下maven安装及配置,好好看,好好学,超详细的 第一步 进入maven官网下载,如下图所示: 第二步 下载好压缩包或解压到除了c盘任意一个盘, ...

  7. MySQL查询数据(超详细)

    MySQL查询数据(超详细) 一.简单查询语句 select * from 表名 条件查询语句; 二.多表查询 多张表有同名字段出现在select语句中,同名字段必须带上 "表名 . 字段名 ...

  8. MySQL修改数据(超详细)

    MySQL修改数据(超详细) 更新/修改数据 只改想改的数据: update 表名 set 字段名=值 where 条件子句; 如: update c1 set name="库里30&quo ...

  9. mysql主从同步怎么指定端口_MySQL主从同步配置

    MySQL主从同步配置 为什么要做主从同步? 在非常复杂的业务中,经常会碰到有sql需要锁表的场景,导致暂时不能读取数据,那么就影响运行中的业务,而使用主从复制,让主库复制写,从库复制读,这样就算主库 ...

最新文章

  1. [转载]去除文件中的^M
  2. 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )
  3. 【小白学PyTorch】16.TF2读取图片的方法
  4. ci Call to undefined function site_url()
  5. JavaFX之TableView的TableRow
  6. c语言第一周作业答案,C语言程序设计下mooc答案.pdf
  7. python手绘效果图_2020高校邦《马克笔手绘效果图》判断题答案2020高校邦《网络数据采集与Python爬虫(山东大学定制班级)》见面课测试答案...
  8. [POJ3177]Redundant Paths(双联通)
  9. 我笑了一天的签名。。。
  10. L1-049 天梯赛座位分配(模拟)
  11. 容器云未来:Kubernetes、Istio 和 Knative
  12. java arraylist 字符串数组_java中String,数组,ArrayList三者之间的转换
  13. PDMS Pipeline Tool 教程(四):目录树顺序检查
  14. [嵌入式]A/D转换器
  15. 搭建离线版keras中文文档
  16. 分享一个超酷创建互动文档的Javascript类库 - tangle
  17. GIS就业参考系列之方向篇——条条大道通罗马
  18. 语义分割的评价指标——IoU
  19. 如果去掉数学前后的空格_excel表格数据消除前后空格-EXCEL表格中数据后面的空格怎么去掉,一条条手工删......
  20. 银行卡正则,验证银行卡是否有效

热门文章

  1. 使用计算机软件进行电视剪辑称为,浙江省2008年4月高等教育自学考试影像与剪辑艺术试题...
  2. extjs store 复杂json_extjs 2.3 修复 jsonstore 嵌套多级引用数据NULL的BUG
  3. mysql怎么禁止远程连接_mysql禁止远程访问
  4. 详细讲解Python中继承内容之 单继承;(一)
  5. Python语法中的模糊语义,你知道吗?
  6. Python编程4道练习题
  7. Python基础教程:括号()[]{}详解
  8. python常用的日期时间模块
  9. 首次登录kk服务器信息,kk云服务器设置
  10. php获取上海时间代码,PHP获取星期的方法及代码