MySQL主从搭建(多主一从)的实现思路与步骤

背景:

由于最近公司项目好像有点受不住并发压力了,优化迫在眉睫。由于当前系统是单数据库系统原因,能优化的地方也尽力优化了但是数据库瓶颈还是严重限制了项目的并发能力。所以就考虑了添加数据库来增大项目并发能力。

思路:

1: 创建集中库: 主要就是存储历史数据。作为查询使用。

2:创建多个业务库:满足项目高并发的能力。

demo环境:

1: VM ware 虚拟机 - centOS 7

centOS-1: 192.168.194.3 主 100-------业务库

centOS-2: 192.168.194.4 主 200-------业务库

centOS-3: 192.168.194.5 从 300-------相当于集中库

2:mysql 5.7

步骤

1: 主库100

设置my.cnf。

[mysqld]
lower_case_table_names = 1 # 表名不区分大小写
server-id = 100
log_bin = mysql-bin  #开始binlog记录
binlog_format = MIXED
#每次事务提交,MySQL都会把binlog刷下去,是最安全但是性能损耗最大的设置。
#这样的话,在数据库所在的主机操作系统损坏或者突然掉电的情况下,系统才有可能丢失1个事务的数据
#但是binlog虽然是顺序IO,但是设置sync_binlog=1,多个事务同时提交,
#同样很大的影响MySQL和IO性能。按需设置。
sync_binlog = 1
# 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days = 7
#binlog_cache_size = 128m
#max_binlog_cache_size = 512m
#max_binlog_size = 256M
# 需要同步库
binlog-do-db = dev
# 不需要同步库
binlog-ignore-db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performation_schema
binlog_ignore_db = sys
datadir=/var/lib/mysql

设置slave用户

# mysql -uroot -p
# password: xxxxxx
# mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'root1234';
# mysql> flush privileges;
# quit;
# systemctl restart mysqld;
# show master status \G
#*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 886
     Binlog_Do_DB: dev
 Binlog_Ignore_DB: mysql,information_schema,performation_schema,sys
Executed_Gtid_Set:
1 row in set (0.00 sec)

2: 主库200

设置my.cnf。

[mysqld]
lower_case_table_names = 1 # 表名不区分大小写
server-id = 200
log_bin = mysql-bin  #开始binlog记录
binlog_format = MIXED
#每次事务提交,MySQL都会把binlog刷下去,是最安全但是性能损耗最大的设置。
#这样的话,在数据库所在的主机操作系统损坏或者突然掉电的情况下,系统才有可能丢失1个事务的数据
#但是binlog虽然是顺序IO,但是设置sync_binlog=1,多个事务同时提交,
#同样很大的影响MySQL和IO性能。按需设置。
sync_binlog = 1
# 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days = 7
#binlog_cache_size = 128m
#max_binlog_cache_size = 512m
#max_binlog_size = 256M
# 需要同步库
binlog-do-db =dev
# 不需要同步库
binlog-ignore-db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performation_schema
binlog_ignore_db = sys
datadir=/var/lib/mysql

设置slave用户

# mysql -uroot -p
# password: xxxxxx
# mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'root1234';
# mysql> flush privileges;
# quit;
# systemctl restart mysqld;
# show master status \G
#*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 154
     Binlog_Do_DB: dev
 Binlog_Ignore_DB: mysql,information_schema,performation_schema,sys
Executed_Gtid_Set:
1 row in set (0.00 sec)

3: 从库300

设置my.cnf。

[mysqld]
lower_case_table_names = 1 # 表名不区分大小写
server-id = 300
master_info_repository = table
relay_log_info_repository = table
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

设置主库信息

# mysql -uroot -p
# password: xxxxxx
# 设置主库信息
# mysql> CHANGE MASTER TO
# ->MASTER_HOST='192.168.194.3',
# ->MASTER_PORT=3306, MASTER_USER='slave',
# ->MASTER_PASSWORD='root1234',
# ->MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=886 for channel '100';
# mysql> CHANGE MASTER TO
# ->MASTER_HOST='192.168.194.4',
# ->MASTER_PORT=3306, MASTER_USER='slave',
# ->MASTER_PASSWORD='root1234',
# ->MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154  for channel '200';
# 设置主库信息
# mysql> flush privileges;
# start slave;
# mysql>show slave status \G  

标识同步成功

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

测试。

随意主库:创建表,插入一条数据。

CREATE TABLE `t_user`  (
  `id` varchar(32) NOT NULL COMMENT '主键ID',
  `name` varchar(32) CHARACTER SET utf8mb4 NULL COMMENT '用户名称',
  `code` varchar(32) CHARACTER SET utf8mb4 NULL COMMENT '用户编码',
  `phone_number` varchar(300) CHARACTER SET utf8mb4 NULL COMMENT '电话号码',
  `create_date` datetime NULL COMMENT '创建时间',
  `update_date` datetime NULL COMMENT '修改时间',
  PRIMARY KEY (`id`)
) COMMENT = '用户信息表';
INSERT INTO t_user (`id`, `name`, `code`, `phone_number`, `create_date`, `update_date`)
VALUES ('userId_4', '张三', '123456789', '123456789632', '2020-04-27 22:05:00', '2020-04-27 22:05:00');

从库查询

SELECT * FROM t_user;
------+--------+----------+--------------+---------------------+-------------+
| id       | name   | code     | phone_number | create_date  | update_date |
+-------+--------+----------+--------------+---------------------+----------+
| userId_4 | 张三 |123456789|123456789632|2020-04-27 22:05:00|2020-04-27 22:05:00 

总结

到此这篇关于MySQL主从搭建(多主一从)的实现思路与步骤的文章就介绍到这了,更多相关MySQL主从搭建内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用Docker容器搭建MySql主从复制

    1. 编写主MySQL的Docker文件 新建文件夹,命名为MySQL-master-v1.在文件夹mysql-master-v1中新建文件Dockerfile和master.cnf.笔者推荐使用的编辑器是Visual Studio Code.利用编辑器将这两个文件的编码设置成UTF-8.因为本文介绍安装到Linux系统下,所以笔者建议读者把换行符设置成LF,以兼顾Linux操作系统.按照如下内容编写这两个文件. Dockerfile FROM mysql:5.7 # set timezone

  • MySQL主从数据库搭建方法详解

    本文实例讲述了MySQL主从数据库搭建方法.分享给大家供大家参考,具体如下: 主从服务器是mysql实时数据同步备份的一个非常好的方案了,现在各大中小型网都都会使用mysql数据库主从服务器功能来对网站数据库进行异步备份了,下面我们来给大家介绍主从服务器配置步骤. Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务. (1)首先确保主从服务器上的Mysql版本相同 (2)在主服务器上,设置一个从数据库的账户,使用R

  • MySQL5.7.18主从复制搭建(一主一从)教程详解

    一.复制原理 主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新. MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上.当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句.主服务器创建一个线程将

  • 基于Docker的MySQL主从复制环境搭建的实现步骤

    1. 前言 之前的程序架构可能是这样的一种形式: 当程序体量扩大后,我们进行扩展,可能会扩展多个后台服务实例,但数据库还是只有一个,所以系统的瓶颈还是在数据库上面,所以这次的主要任务就是对数据库进行扩展,主要形式为:扩展多台数据库实例,实现读写分离,对于一些写的任务分配到主数据库,对于读的任务使用子数据库进行读取.从而提高系统性能. 修改后的架构如下所示: 2. 环境预搭建 这次使用docker来进行这个环境的搭建,使用MySQL版本为5.7.13. docker pull mysql:5.7.

  • mysql 5.7 docker 主从复制架构搭建教程

    分享mysql 5.7 docker 主从复制架构搭建教程,供大家参考,具体内容如下 环境版本: MySQL :  5.7.13 Docker : 1.11.2 CentOS : 7.1 1.先在两个物理机上分别安装两个MySQL.命令如下 复制代码 代码如下: docker pull mysql:5.7.13  docker run --name anuo-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=qaz.00JK -d mysql:5.7.13 2.

  • 详解MySQL主从复制读写分离搭建

    MySQL主从设置 MySQL主从复制,读写分离的设置非常简单: 修改配置my.cnf文件 master 和 slave设置的差不多: [mysqld] log-bin=mysql-bin server-id=222 log-bin=mysql-bin的意思是:启用二进制日志. server-id=222的意思是设置了服务器的唯一ID,默认是1,一般取IP最后一段,可以写成别的,只要不和其他mysql服务器重复就好. 这里,有的MySQL默认的my.cnf文件引用了/etc/mysql/conf

  • MySQL主从搭建(多主一从)的实现思路与步骤

    背景: 由于最近公司项目好像有点受不住并发压力了,优化迫在眉睫.由于当前系统是单数据库系统原因,能优化的地方也尽力优化了但是数据库瓶颈还是严重限制了项目的并发能力.所以就考虑了添加数据库来增大项目并发能力. 思路: 1: 创建集中库: 主要就是存储历史数据.作为查询使用. 2:创建多个业务库:满足项目高并发的能力. demo环境: 1: VM ware 虚拟机 - centOS 7 centOS-1: 192.168.194.3 主 100-------业务库 centOS-2: 192.168

  • Django搭建MySQL主从实现读写分离

    目录 一.MySQL主从搭建 操作步骤 二.Django实现读写分离 自动指定 一.MySQL主从搭建 主从配置原理: 主库写日志到 BinLog 从库开个 IO 线程读取主库的 BinLog 日志,并写入 RelayLog 再开一个 SQL 线程,读 RelayLog 日志,回放到从库中 主从配置流程: master 会将变动记录到二进制日志里面: master 有一个 I/O 线程将二进制日志发送到 slave: salve 有一个 I/O 线程把 master 发送的二进制写入到 rela

  • MySQL基于GTID主从搭建

    目录 一.用xtarbackup备份数据库 1.1 优势 1.2 安装 1.3 使用 1.3.1 普通备份 1.3.2 tar备份 1.3.3 xbstream备份 1.3.4 恢复 二.基于GTID做数据同步 2.1 GTID的概念 2.2 GTID的组成 2.3 GTID的原理 2.4 GTID的优势 2.5 具体搭建过程 2.5.1 开启主(master)Gtid 2.5.2 在master上进行数据备份 2.5.3 解压备份的数据 2.5.4 配置slave的配置文件 2.5.5 恢复数

  • mysql5.6主从搭建以及不同步问题详解

    目录 一.mysql主从复制原理 二.mysql编译安装 三.主从配置 四.主从不同步 系统:centos6.6 主:192.168.142.129 mysql-5.6.30.tar.gz 从:192.168.142.130 192.168.142.131 mysql-5.6.30.tar.gz 一.mysql主从复制原理 (1) master将改变记录到二进制日志(binary log)中: (2) slave将master的binary log events拷贝到它的中继日志(relay l

  • 如何快速使用mysqlreplicate搭建MySQL主从

    简介 mysql-utilities工具集是一个集中了多种工具的合集,可以理解为是DBA的工具箱,本文介绍利用其中的mysqlreplicate工具来快速搭建MySQL主从环境. HE1:192.168.1.248 slave HE3:192.168.1.250 master 实战 Part1:安装mysql-utilities [root@HE1 ~]# tar xvf mysql-utilities-1.5.4.tar.gz [root@HE1 ~]# cd mysql-utilities-

  • 在centos7上搭建mysql主从服务器的方法(图文教程)

    本文主要是介绍在centos上搭建mysql的主从服务器.如果没有搭建过的,可以查看我以前的博客,里面有详细的安装centos和在centos上安装mysql的说明. 一.安装从虚拟机: 1.右键->管理->克隆 2.选择完整克隆 3.修改虚拟机的位置,默认在C盘下. 4.当克隆完成后,就有这样两台虚拟机了, 由于克隆的两台服务器,ip是一样的,所以需要修改从服务虚拟机ip: 5.修改从服务虚拟机的配置,打开配置文件 如果不知道配置文件是哪个,可以按照下面的方式找到, 6.找到下面红线部分,将

  • MySQL主从配置及haproxy和keepalived搭建过程解析

    目录 docker 小知识 创建harpoxy.Keepalive 的容器 下载MySQL MySQL主主配置 172.17.0.2 MySQL 配置 172.17.0.2的配置 执行sql命令 MySQL主从配置 haproxy 配置 新创建centos容器 配置成功之后,就可以在其他服务器通过该服务器地址链接MySQL了 Keepalived 配置 使用haproxy同样的服务器 本篇文章主要介绍如何搭建MySQL主主配置.主从配置.haproxy.keepalived,已经搭建过程中的一些

  • 浅谈如何保证Mysql主从一致

    目录 binlog的三种格式对比 为什么会有mixed格式的binlog? 循环复制问题 小结 为什么备库执行了 binlog 就可以跟主库保持一致了呢?今天正式地和你介绍一下它. 在最开始,MySQL 是以容易学习和方便的高可用架构,被开发人员青睐的.而它的几乎所有的高可用架构,都直接依赖于 binlog.虽然这些高可用架构已经呈现出越来越复杂的趋势,但都是从最基本的一主一备演化过来的. MySQL 主备的基本原理 图 1 MySQL 主备切换流程 在状态 1 中,客户端的读写都直接访问节点

随机推荐