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

作者:A.Wang 时间:2024-01-18 01:14:02 

背景:

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

思路:

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

标签:mysql,主从,搭建
0
投稿

猜你喜欢

  • MySQL 实现双向复制的方法指南

    2024-01-27 02:19:51
  • 如何利用Python开发一个简单的猜数字游戏

    2022-05-21 20:38:08
  • python使用numpy实现直方图反向投影示例

    2022-09-18 11:28:55
  • 解决python 虚拟环境删除包无法加载的问题

    2023-09-15 14:43:57
  • python如何使用replace做多字符替换

    2022-10-23 01:26:59
  • django rest framework 数据的查找、过滤、排序的示例

    2023-07-18 16:33:39
  • ASP中3种分页显示的性能比较

    2007-08-15 13:37:00
  • 如何在网页中制作虚线表格

    2010-10-20 20:07:00
  • pymysql之cur.fetchall() 和cur.fetchone()用法详解

    2024-01-15 14:31:50
  • 如何改良你的CSS代码编写结构

    2008-09-29 16:03:00
  • python多线程分块读取文件

    2023-10-29 18:48:51
  • 用Python自动清理电脑内重复文件,只要10行代码(自动脚本)

    2021-03-23 05:09:50
  • MySQL数据库配置优化的方案

    2024-01-14 00:41:52
  • 浅析php中array_map和array_walk的使用对比

    2023-09-10 22:22:28
  • 正确认识MySQL对服务器端光标的限制

    2008-12-03 15:52:00
  • 浅谈Python traceback的优雅处理

    2023-08-06 06:57:42
  • 配置MySQL与卸载MySQL实例操作

    2024-01-19 21:55:26
  • 详解MySQL的用户密码过期功能

    2024-01-21 01:29:40
  • 使用CSS选择器创建个性化链接样式

    2009-06-02 13:07:00
  • 在Django中创建URLconf相关的通用视图的方法

    2021-09-17 06:07:58
  • asp之家 网络编程 m.aspxhome.com