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

通过MySQL主从配置,可以实现读写分离减轻数据库压力,最近正好遇到这个功能,所以这篇文章主要给大家介绍了关于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。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

[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用户

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

# 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。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

[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用户

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

# 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。

?

1

2

3

4

5

6

7

8

9

10

[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

设置主库信息

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# 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

测试。

随意主库:创建表,插入一条数据。

?

1

2

3

4

5

6

7

8

9

10

11

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');

从库查询

?

1

2

3

4

5

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

原文链接:https://blog.csdn.net/wangsdsdfds/article/details/105809232

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/7531/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022-08-01 7:34:52
下一篇 2022-08-01 7:35:08

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!