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 相关文章推荐
浅析InnoDB索引结构
Apr 05 MySQL
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
Jun 26 MySQL
MySQL外键约束(FOREIGN KEY)案例讲解
Aug 23 MySQL
Mysql排序的特性详情
Nov 01 MySQL
进阶篇之linux环境下安装MySQL数据库
Apr 09 MySQL
Windows下载并安装MySQL8.0.x 版本的完整教程
Apr 10 MySQL
mysql中如何用命令创建联合唯一索引
Apr 20 MySQL
MySQL数据库安装方法与图形化管理工具介绍
May 30 MySQL
MYSQL中文乱码问题的解决方案
Jun 14 MySQL
MySQL一劳永逸永久支持输入中文的方法实例
Aug 05 MySQL
MySQL 原理与优化之原数据锁的应用
Aug 14 MySQL
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
May 08 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
文章推荐系统(三)
2006/10/09 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
PHP中读写文件实现代码
2011/10/20 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
PHP框架性能测试报告
2016/05/08 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
jQuery UI Datepicker length为空或不是对象错误的解决方法
2010/12/19 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
js replace 与replaceall实例用法详解
2013/08/03 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
js中作用域的实例解析
2017/03/16 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
浅谈python可视化包Bokeh
2018/02/07 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
python实现图书借阅系统
2019/02/20 Python
Python list运算操作代码实例解析
2020/01/20 Python
django 模版关闭转义方式
2020/05/14 Python
联想英国官网:Lenovo英国
2019/07/17 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
质检部经理岗位职责
2014/02/19 职场文书
静心口服夜广告词
2014/03/20 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
公司人事管理制度
2015/08/05 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA