MySQL主从搭建(多主一从)的实现思路与步骤
作者:A.Wang 发布时间:2024-01-18 01:14:02
标签: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
总结
来源:https://blog.csdn.net/wangsdsdfds/article/details/105809232
0
投稿
猜你喜欢
- <script type="text/javascript">一、获取url所有参数值function US
- 在使用过程中,一边看文档一边做,遇到了一些困难的地方,在此记录一下,顺便做个总结:1、前端分页2、后端分页3、模糊查询前端分页相当简单,在我
- 一、安装并配置 JMeter下载官网下载,下载二进制的这个 zip配置环境变量然后解压到你喜欢的位置,配置环境变量,新建一个 JMETER_
- Pandas处理CSV文件,分为以下几步:读取Pandas文件统计列值出现的次数筛选特定列值遍历数据行绘制直方图(柱状图)读取Pandas文
- 这篇文章主要介绍了Pycharm debug调试时带参数过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 我们假设TPCoins的发起人最初向已知客户 Dinesh 发出500个TPCoins.为此,他首先创建一个Dinesh
- 基本设置class Map3D( # 初始化配置项,参考 `global_options.InitOpts` &n
- 昨天下班后忽然兴起想写一个爬虫抓抓网页上的东西。花了一个钟简单学习了python的基础语法,然后参照网上的例子自己写了个爬虫。python数
- 我们经常在处理字符串时遇到有很多空格的问题,一个一个的去手动删除不是我们程序员应该做的事情,今天这篇技巧的文章脚本之家就来给大家讲一下,如何
- 大家好,我是不学前端的前端程序员,事情是这个样子的,前几天不是双十一预购秒杀嘛由于我女朋友比较笨,手速比较慢,就一直抢不到,她没抢到特价商品
- pandas创建series方法print("====创建series方法一===")dic={"a"
- 最近写一个小小的留言本;算是对AJAX的综合应用迈出了一小步在制作过程中有很多兴奋的体验 虽然和以前的制作方法比起来繁杂了一些但是整个页面的
- PRD的作用之一在于,保留产品设计初衷,期望达到什么样的目的,起到事后验证的效果。产品初衷需要做到利益最大化,找最大的蛋糕,为最大目标人群服
- psutil是什么psutil是一个能够获取系统信息(包括进程、CPU、内存、磁盘、网络等)的Python模块。主要用来做系统监控,性能分析
- 1>保存为二进制文件,pkl格式import picklepickle.dump(data,open('file_path
- 本文最主要参考的是这一篇,后端也是用django来完成。大文件上传(秒传/断点续传)_使用Vue-Simple-Uploader插件 --V
- 哪里出问题了python 中,使用 global 会将全局变量设为本函数可用。同时,在函数内部访问变量会先本地再全局。在嵌套函数中,使用 g
- 将django语法和sql对应一下,希望对大家有所帮助查询单个列的值story.object.values_list("url&q
- 注册了oracle的登录名:10402852@qq.com密码:dsideal******** 后面的*号是王卓常用的密码,但是
- 本文介绍了python十进制和二进制的转换方法(含浮点数),分享给大家,也给自己留个笔记,具体如下:我终于写完了 , 十进制转二进制的小数部