深入精通Mysql系列其他文章推荐:

一、前言

随着应用业务数据不断的增大,应用的响应速度不断下降,在检测过程中我们不难发现大多数的请求都是查询操作。

此时,我们可以将数据库扩展成主从复制模式,将读操作和写操作分离开来,多台数据库分摊请求,从而减少单库的访问压力,进而应用得到优化。本次测试使用两个虚拟机: ip:192.168.2.21(主) ip:192.168.2.22(从)

二、主从复制原理

同步操作通过 3 个线程实现,其基本步骤如下:

主服务器将数据的更新记录到二进制日志中(记录被称作二进制日志事件)-- 主库线程;

从库将主库的二进制日志复制到本地的中继日志(relay log)-- 从库 I/O 线程;

从库读取中继日志中的事件,将其重放到数据中 -- 从库 SQL 线程。

三、配置主库

# 3.1 创建用户

为了安全起见,准备创建一个新用户用于从库连接主库。

# 创建用户

create user 'repl'@'%' identified by 'repl';

# 授权,只授予复制和客户端访问权限

grant replication slave,replication client on *.* to 'repl'@'%' identified by 'repl';

# 3.2 修改配置文件

1)vim /etc/my.cnf 在[mysqld]下添加:

log-bin = mysql-bin

log-bin-index = mysql-bin.index

binlog_format = mixed

server-id = 21

sync-binlog = 1

character-set-server = utf8

2)保存文件并重启主库:

service mysqld restart

配置说明:

log-bin:设置二进制日志文件的基本名;

log-bin-index:设置二进制日志索引文件名;

binlog_format:控制二进制日志格式,进而控制了复制类型,三个可选值

-STATEMENT:语句复制

-ROW:行复制

-MIXED:混和复制,默认选项

server-id:服务器设置唯一ID,默认为1,推荐取IP最后部分;

sync-binlog:默认为0,为保证不会丢失数据,需设置为1,用于强制每次提交事务时,同步二进制日志到磁盘上。

# 3.3 备份主数据库数据

若主从数据库都是刚刚装好且数据都是一致的,直接执行 show master status 查看日志坐标。

若主库可以停机,则直接拷贝所有数据库文件。

若主库是在线生产库,可采用 mysqldump 备份数据,因为它对所有存储引擎均可使用。

1)为了获取一个一致性的快照,需对所有表设置读锁:

flush tables with read lock;

2)获取二进制日志的坐标:

show master status;

返回结果:

+------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 | 120 | | | |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

3)备份数据:

# 针对事务性引擎

mysqldump -uroot -ptiger --all-database -e --single-transaction --flush-logs --max_allowed_packet=1048576 --net_buffer_length=16384 > /data/all_db.sql

# 针对 MyISAM 引擎,或多引擎混合的数据库

mysqldump -uroot --all-database -e -l --flush-logs --max_allowed_packet=1048576 --net_buffer_length=16384 > /data/all_db.sql

4)恢复主库的写操作:

unlock tables;

四、配置从库

# 4.1 修改配置文件

1)vim /etc/my.cnf 在[mysqld]下添加:

log-bin = mysql-bin

binlog_format = mixed

log-slave-updates = 0

server-id = 22

relay-log = mysql-relay-bin

relay-log-index = mysql-relay-bin.index

read-only = 1

slave_net_timeout = 10

2)保存文件并重启从库:

service mysqld restart

配置说明:

log-slave-updates:控制 slave 上的更新是否写入二进制日志,默认为0;若 slave 只作为从服务器,则不必启用;若 slave 作为其他服务器的 master,则需启用,启用时需和 log-bin、binlog-format 一起使用,这样 slave 从主库读取日志并重做,然后记录到自己的二进制日志中;

relay-log:设置中继日志文件基本名;

relay-log-index:设置中继日志索引文件名;

read-only:设置 slave 为只读,但具有super权限的用户仍然可写;

slave_net_timeout:设置网络超时时间,即多长时间测试一下主从是否连接,默认为3600秒,即1小时,这个值在生产环境过大,我们将其修改为10秒,即若主从中断10秒,则触发重新连接动作。

4.2 导入备份数据

如果 3.3 步骤中没进行备份,忽略此步骤。

mysql -uroot -p < /data/all_db.sql

4.3 统一二进制日志的坐标

根据 3.3 步骤获取的坐标,统一到从库中:

change master to

master_host='192.168.2.21',

master_user='repl',

master_password='repl',

master_port=3306,

master_log_file='mysql-bin.000001',

master_log_pos=120;

注意:此处使用的是新创建的账户。

4.4 启动主从复制

1)启动从库 slave 线程:

start slave;

2)查看从服务器复制功能状态:

show slave status\G;

返回结果:

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.2.21

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 120

Relay_Log_File: mysql-relay-bin.000002

Relay_Log_Pos: 283

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 120

此处只张贴部分返回结果。

结果说明:

Slave_IO_Running:此进程负责 slave 从 master 上读取 binlog 日志,并写入 slave 上的中继日志。

Slave_SQL_Running:此进程负责读取并执行中继日志中的 binlog 日志。

这两个进程的状态需全部为 YES,只要有一个为 NO,则复制就会停止。

当 Relay_Master_Log_File = Master_Log_File 且 Read_Master_Log_Pos = Exec_Master_Log_Pos 时,则表明 slave 和 master 处于完全同步的状态。

五、验证

使用一个简单的例子:

在主库创建名为 mysql_test 的数据库,如果同步成功,那么在从库中也能查询出名为 mysql_test 数据库。

深入精通Mysql系列其他文章推荐:

精通mysql_《深入精通Mysql(五)》实战:Mysql实现主从复制相关推荐

  1. MySQL 案例实战--MySQL 数据库 之 温备份 热备份

    MySQL 数据库 之 温备份 & 热备份 前言 一.完全备份方案 二.增量备份方案 三.GTID 备份 四.mydumper 备份 五.LVM 快照备份 六.xtrabackup 备份 1. ...

  2. MySQL 案例实战--MySQL 数据库 之 冷备份

    MySQL 数据库 之 冷备份 前言 一.数据库备份类型 二.数据库备份的内容 三. MySQL 数据库 之 冷备份 1.环境准备 2.备份要求 3.备份流程 前言 本环境是基于 Centos 7.8 ...

  3. 十五. 实战——mysql建库建表 字符集 和 排序规则

    1. 字符集和排序规则 字符集 当数据库需要适应不同的语言就需要有不同的字符集,如果不指定字符集的话,那么就会使用数据库的默认的字符集,每种字符集都有自己默认的排序规则.mysql默认字符集为utf8 ...

  4. MySQL 案例实战--MySQL数据库 存储过程 存储函数

    MySQL数据库 存储过程 & 存储函数 前言 一.什么是存储过程 & 存储函数 二.存储过程的创建和调用 三.存储函数的创建和调用 前言 本环境是基于 Centos 7.8 系统构建 ...

  5. MySQL 案例实战--MySQL 基于Mycat实现读写分离

    MySQL 基于Mycat实现读写分离 前言 一.什么是读写分离? 二.MySQL 读写分离解决方案 三.MySQL 基于Mycat实现读写分离 四.Mycat-web 管理部署 前言 本环境是基于 ...

  6. MySQL 案例实战--MySQL数据库 单表查询 一

    前言 本环境是基于 Centos 7.8 系统构建MySQL-5.7.14 具体构建,请参考 MySQL-5.7.14 环境构建 素材准备: DROP TABLE IF EXISTS `course` ...

  7. mysql颠覆实战笔记(五)--商品系统设计(二):定时更新商品总点击量

    继续回到沈老师的MYSQL颠覆实战,首先回顾下上一节课的内容,请大家会看下上节课写的存储过程. 打开prod_clicklog表, 我们只要把日期(不含时分秒)的部分存在数据库中, 如果同一日期有相同 ...

  8. SIKI学院:MySQL数据库从零到精通:八:课时 10 : 09-如何利用MySQL Workbench查看数据库和创建

    目录 一.目的 1.想:提高学习效率,所以将老师的内容记录下来 二.参考 1.SIKI学院 三.注意 1.课程资源下载 1.MySQL下载地址 四.操作:成功 1.查看数据库 1.新建数据库 一.目的 ...

  9. 监控mysql锁定状态_企业实战Mysql不停机维护主从同步

    实战环境: Mysql-5.7 Xtrabackup-2.4 Xtrabackup 介绍: Percona XtraBackup是一款基于MySQL的服务器的开源热备份实用程序,在备份过程中不会锁定数 ...

  10. Java云同桌学习系列(十五)——MySQL数据库

    本博客java云同桌学习系列,旨在记录本人学习java的过程,并与大家分享,对于想学习java的同学,我希望这个系列能够鼓励大家一同与我学习java,成为"云同桌". 每月预计保持 ...

最新文章

  1. 飞书携手问卷网并肩抗“疫”,助力疫情信息申报收集工作
  2. Keras中Callback函数的使用
  3. 融资租赁基础干货知识大整理
  4. 类别选择器在HTML中如何表示,CSS类别选择器
  5. Nginx下301重定向不带www的域名到带www的域名
  6. 你知道这 8 种 SQL 错误用法吗?
  7. bigdecimal正确用法_BigDecimal使用实践和注意事项
  8. 创建一个简单的ArcGIS Server ASP.NET网页
  9. LeetCode 201. 数字范围按位与
  10. 红米骁龙855旗舰关键细节曝光:256G ROM+GPU超频模式
  11. 20-190-092-安装-Flink集群安装 flink-1.9.0 On Yarn
  12. 搜索引擎网站登陆入口,提交入口
  13. redis源码剖析(3):基础数据结构dict
  14. 1060 Are They Equal (25 分)科学计数法,stl中string的各种函数用法
  15. android textview全部属性,Android TextView属性大全
  16. 计算机教室布线施工方案,最新计算机教室施工方案.docx
  17. FreeBSD安装MySQL
  18. 魔兽服务器里炉石怎么修改,魔兽世界炉石怎么用
  19. matlab 模的平方,RSA模重复平方算法小示例
  20. FFTW使用说明及实例调用

热门文章

  1. Microsoft Visual Studio 2012 添加实体数据模型
  2. CentOS7启动图形界面
  3. 国家智慧城市战略实施 保温材料等建材万亿市场待挖掘
  4. 1.3 使用jmeter进行http接口测试
  5. oracle 内存分配和调优 总结
  6. QT 5.4.1 for Android Ubuntu QtWebView Demo
  7. ACM-ICPC历届世界总冠军名单1977-2015
  8. 一步一步学Silverlight 2系列(3):界面布局
  9. docker基础文档(链接,下载,安装)
  10. 输入字符串,包含数字,大小写字母,编程输出出现做多的数字的和