菜鸟学Linux 第094篇笔记 mysql主从复制

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

菜鸟学Linux 第094篇笔记 mysql主从复制




内容总览

课程总览

MySQL Replication(主从复制)

二进制日志

中继日志

数据库读写分离原理

当数据库写操作特别繁忙时,如何解决

配置MySQL复制基本步骤

配置主从服务器详细步骤

配置主主mysql模式配置(简略说,因为不推荐使用此模式)

自行研究mysql主从复制基于加密方式

percona提供的主从复制管理工具





接下来要讲解的课程

大规模,高并发web服务器体系结构;

mysql复制, Nginx, LNMP, Memcached, Tomcat(java, servlet, 集群), varnish(squid)

NoSQL(redis, mongodb)




MySQL Replication


mysql log

二进制日志

事务日志

错误日志

一般查询日志

中继日志

慢查询日志



二进制日志

目录:数据目录

mysql-bin.xxxxxx

滚动:达到最大上限, flush logs, 服务重启

清除日志 mysql> PURGE


日志格式

statement

row

mixed


mysql-bin.index: 二进制日志文件的索引


mysql> SHOW MASTER STATUS; 显示mysql正在使用的日志文件和位置

mysql> SHOW BINARY LOGS; 显示二进制日志文件列表

mysql> SHOW BINLOG EVENTS IN "file";  显示某个二进制日志的详细内容


event:

timestamp

position, offset, OPERATION, server id,


即时点还原

mysql隔离级别

READ-UNCOMMITTED

READ-COMMITTED

REPEATABLE-READ

SERIALIZABLE



 中继日志

  是一个用来接收主服务器发送过来的二进制日志,并在从服务器上再执行一次的一个日志文件

  只有从服务器有


  可以实现冷备份


  一主多从,也可以多级复制

  作用:

  辅助实现备份

  高可用

  异地容灾

  scale out: 分摊负载



  即时点还原,还是需要主服务器的二进制日志文件,和位置



mysql proxy(代理 读写分离)

可以实现mysql的读写分离,当用户连接数据库时,先连接到mysql代理服务器,代理服务器可以

分析用户所发的mysql语句是读还是写,然后再将其发送至不同的后端mysql服务器

rw-spliting


主从架构中,不使用mysql代理,如何让主的负责写,从的负责读? 

(可以在前端软件实现)


一个从mysql服务器,只能属于一个主服务器

amoeba 读写分离

cobar 数据拆分



双主模型无法减轻写操作(不推荐使用)



当数据库写操作特别繁忙时,如何解决

虽然读写分离可以解决数据库读操作的问题,但是写操作依然是由一台服务器来进行,以下是

解决写操作的方案,但是这个需要对公司业务逻辑要非常的了解,还有一种就是数据库设计时,

设计数据库的设计者,当时就已经对公司未来的业务发展方向,和数据库增长趋势有了归划,

哪些是热点区域,哪里表要放到一个数据库里等。(当然后者这位设计者肯定是个高人呵呵)

(拒听高人说,这个没有做DBA 3~5年一般公司不敢让你来操作这个)


垂直拆分

它是将数据库里的多张表拆分为多个数据库来实现其写操作分布到多个服务器

水平拆分

它是将数据库的某些热区域的表进行拆分,即将一张表以行进行拆分

(这里只做基本了解,具体无法深入只要知道即可,由于水平学得很浅呵呵)





配置MySQL复制基本步骤


1. master

启用二进制日志

log-bin = master-bin

log-bin-index = master-bin.index


选择一个server-id

server-id = {0-2^32}


创建具有复制权限的用户

REPLICATION SLAVE

REPLICATION CLIENT



2. slave

启用中继日志

relay-log = relay-log

relay-log-index = 


选择一个唯一的server-id (千万别和主服务器重复)

server-id = {0-2^32}


连接至主服务器,并开始复制数据

CHANGE MASTER TO

MASTER_HOST='',MASTER_PORT='',MASTER_LOG_FILE='',MASTER_LOG_POS='',

MASTER_USER='',MASTER_PASSWORD='';    (一行命令)


START SLAVE;


START SLAVE IO_Thread;

START SLAVE SQL_Thread;



复制线程

master: dump

slave: IO_Thread, SQL_Thread





配置主从服务器详细步骤

准备工作 

两台节点 192.168.11.131 192.168.11.132

安装mysql

基本配置不作详解,这里说一些不一样的配置


1. 主mysql配置

# vim /etc/my.cnf

datadir = /mydata/data

innodb_file_per_table = 1

log-bin=master-bin

log-bin-index=master-bin.index

server-id = 1


分配用户使其有复制权限

# mysql

mysql> GRANT REPLICATION SLAVE ON *.* TO 'copyuser'@'192.168.11.%' 

IDENTIFIED BY 'copyps';   (一行命令)

mysql> FLUSH PRIVILEGES;


配置sync-binlog = ON 



2.从mysql配置


关闭二进制日志记录功能/etc/my.cnf

# vim /etc/my.cnf

注销此下两项

#log-bin=master-bin

#log-bin-index=master-bin.index


开启中继日志

# vim /etc/my.cnf

在[mysqld]下添加此两项

relay-log = relay-log

relay-log-index = relay-log.index

修改server-id (注意千万不要和主mysql的id相同)

server-id       = 11


连接主mysql服务器

# mysql 

mysql> CHANGE MASTER TO MASTER_HOST='192.168.11.131',MASTER_USER='copyuser',

MASTER_PASSWORD='copyps',MASTER_PORT=3306,MASTER_LOG_FILE='master-bin.000002',

MASTER_LOG_POS=107;    (一行命令)


查看连接主mysql服务器状态

mysql> SHOW SLAVE STATUS\G;


启动从mysql服务器

mysql> START SLAVE;   

此时便可实现主从复制,现在可以试试在主服务器执行创建表删除等操作会不会同步到从

服务器。 但是从服务器现在还有写权限,需要修改为只读模式


修改从mysql为只读模式(但对有SUPER权限是没有效果的)

vim /etc/my.cnf

在[mysqld]下添加一行

read_only = ON

(注意修改完成配置文件需要重启mysqld服务)


验证只读模式是否开启

mysql> SHOW GLOBAL VARIABLES LIKE 'read_only';



3.从mysql服务器是如何保存主mysql器的密码的?

在数据目录文件里会有这样两个文件,自行直接看一下吧 呵呵

master.info 和 relay-log.info



4.启用半同步复制配置[可选配置,优化性能]

On Master

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

mysql> SET GLOBAL rpl_semi_sync_master_timeout = 2000;


On Slave

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;

mysql> STOP SLAVE IO_THREAD;

mysql> START SLAVE IO_THREAD;


使其永久生效

On Master

vim /etc/my.cnf 在[mysqld]下加入此两行

rpl_semi_sync_master_enabled = 1

rpl_semi_sync_master_timeout = 2000


On Master

vim /etc/my.cnf 在[mysqld]下加入此行

rpl_semi_sync_master_enabled = 1


验证服务器是否开启semi_sync功能

mysql> SHOW GLOBAL VARIABLES LIKE 'rpl%';




配置主主mysql模式配置(简略说,因为不推荐使用此模式)

1. 两台服务器都各自建立一个具有复制权限的用户

2. 两台服务器的server-id必须不同

3. 都启用中继日志功能和二进制日志功能


一台主服务器配置

auto-increment-increment = 2

auto-increment-offset = 1

步进从1开始,每次步进2 即1,3,5,7....


另一台主服务器配置

auto-increment-increment = 2

auto-increment-offset = 2

步进从2开始,每次步进2 即2,4,6,8....


4. 两台服务器都查询自己的binglog日志位置,以供对方服务器连接自己的

mysql> SHOW MASTER STATUS\G;

mysql> CHANGE MASTER TO ...,MASTER_LOGFILE='mysql-bin.000001',

   MYSTER_LOG_POS=710; (注意位置和日志文件都是对方的,切记切记!!!)



自行研究mysql主从复制基于加密方式

建立CA证书中心,给自己签名证书,建立程序证书,建立证书请求,CA签署请求,

mysql配置变量指引证书位置(个人想法,呵呵,待以后查看官方文档再详解)




percona提供的主从复制管理工具

percona-toolkit (可到官网下载)

下载安装后其命令都是以pt-开头 输入pt-+TAB键显示的命令 (下去可以自行研究)

mattki-tools(早期)

本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1895008如需转载请自行联系原作者


Winthcloud

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
29 3
|
11天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
25 3
|
21天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
66 3
|
1月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
83 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
Ubuntu 关系型数据库 MySQL
Linux系统MySQL安装
【10月更文挑战第19天】本文介绍了在 Linux 系统上安装 MySQL 的步骤,包括安装前准备、安装 MySQL、启动 MySQL 服务、配置 MySQL 以及验证安装。适用于 Ubuntu/Debian 和 CentOS/Fedora 系统,提供了详细的命令示例。
171 1
|
7天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
30 3
|
7天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
25 2
|
15天前
|
缓存 监控 Linux
|
18天前
|
Linux Shell 数据安全/隐私保护