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


Posted in MySQL onMay 13, 2021

背景:

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

思路:

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主从搭建内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
数据库连接池
Apr 06 MySQL
MySQL复制问题的三个参数分析
Apr 07 MySQL
教你解决往mysql数据库中存入汉字报错的方法
May 06 MySQL
MySQL系列之三 基础篇
Jul 02 MySQL
MySQL中一条update语句是如何执行的
Mar 16 MySQL
MySQL创建管理RANGE分区
Apr 13 MySQL
Golang连接并操作MySQL
Apr 14 MySQL
Windows 64位 安装 mysql 8.0.28 图文教程
Apr 19 MySQL
MySQL数据库事务的四大特性
Apr 20 MySQL
讲解MySQL增删改操作
May 06 MySQL
MySQL中JOIN连接的基本用法实例
Jun 05 MySQL
mysql中关键词exists的用法实例详解
Jun 10 MySQL
MySQL如何构建数据表索引
May 13 #MySQL
MySQL 自定义变量的概念及特点
May 13 #MySQL
为什么mysql字段要使用NOT NULL
MySQL表字段时间设置默认值
May 13 #MySQL
MySql新手入门的基本操作汇总
May 13 #MySQL
MySQL中你可能忽略的COLLATION实例详解
浅谈mysql执行过程以及顺序
You might like
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
js以对象为索引的关联数组
2010/07/04 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
python操作MySQL数据库的方法分享
2012/05/29 Python
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
实例详解Python装饰器与闭包
2019/07/29 Python
Python 使用matplotlib模块模拟掷骰子
2019/08/08 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
Jupyter加载文件的实现方法
2020/04/14 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
使用CSS3制作版头动画效果
2020/12/24 HTML / CSS
怎样让char类型的东西转换成int类型
2013/12/09 面试题
武汉英思工程科技有限公司–ORACLE面试测试题目
2012/04/30 面试题
主管职责范文
2013/11/09 职场文书
房地产销售计划书
2014/01/10 职场文书
食品销售计划书
2014/04/26 职场文书
员工薪酬激励方案
2014/06/13 职场文书
关爱留守儿童标语
2014/06/18 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
导游词之岳阳楼
2019/09/25 职场文书
导游词之山东八大关
2019/12/18 职场文书
python解决12306登录验证码的实现
2021/04/18 Python
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python