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 相关文章推荐
MySQL系列之一 MariaDB-server安装
Jul 02 MySQL
mysq启动失败问题及场景分析
Jul 15 MySQL
MySQL 1130异常,无法远程登录解决方案详解
Aug 23 MySQL
Mysql实现简易版搜索引擎的示例代码
Aug 30 MySQL
基于MySql验证的vsftpd虚拟用户
Nov 07 MySQL
详解MySql中InnoDB存储引擎中的各种锁
Feb 12 MySQL
分析MySQL优化 index merge 后引起的死锁
Apr 19 MySQL
MYSQL常用函数介绍
May 05 MySQL
解决Mysql报错 Table 'mysql.user' doesn't exist
May 06 MySQL
MySQL示例讲解数据库约束以及表的设计
Jun 16 MySQL
mysql拆分字符串作为查询条件的示例代码
Jul 07 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
PHP小技巧之函数重载
2014/06/02 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
Node.js的特点详解
2017/02/03 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
2017/11/28 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
Python基础教程之正则表达式基本语法以及re模块
2016/03/25 Python
Python用for循环实现九九乘法表
2018/05/31 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
python数据处理之如何选取csv文件中某几行的数据
2019/09/02 Python
python 监控logcat关键字功能
2020/09/04 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
魅力教师事迹材料
2014/01/10 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书