背景:
由于最近公司項(xiàng)目好像有點(diǎn)受不住并發(fā)壓力了,優(yōu)化迫在眉睫。由于當(dāng)前系統(tǒng)是單數(shù)據(jù)庫(kù)系統(tǒng)原因,能優(yōu)化的地方也盡力優(yōu)化了但是數(shù)據(jù)庫(kù)瓶頸還是嚴(yán)重限制了項(xiàng)目的并發(fā)能力。所以就考慮了添加數(shù)據(jù)庫(kù)來(lái)增大項(xiàng)目并發(fā)能力。
思路:
1: 創(chuàng)建集中庫(kù): 主要就是存儲(chǔ)歷史數(shù)據(jù)。作為查詢使用。
2:創(chuàng)建多個(gè)業(yè)務(wù)庫(kù):滿足項(xiàng)目高并發(fā)的能力。
demo環(huán)境:
1: VM ware 虛擬機(jī) - centOS 7
centOS-1: 192.168.194.3 主 100-------業(yè)務(wù)庫(kù)
centOS-2: 192.168.194.4 主 200-------業(yè)務(wù)庫(kù)
centOS-3: 192.168.194.5 從 300-------相當(dāng)于集中庫(kù)
2:mysql 5.7
步驟
1: 主庫(kù)100
設(shè)置my.cnf。
[mysqld]
lower_case_table_names = 1 # 表名不區(qū)分大小寫(xiě)
server-id = 100
log_bin = mysql-bin #開(kāi)始binlog記錄
binlog_format = MIXED
#每次事務(wù)提交,MySQL都會(huì)把binlog刷下去,是最安全但是性能損耗最大的設(shè)置。
#這樣的話,在數(shù)據(jù)庫(kù)所在的主機(jī)操作系統(tǒng)損壞或者突然掉電的情況下,系統(tǒng)才有可能丟失1個(gè)事務(wù)的數(shù)據(jù)
#但是binlog雖然是順序IO,但是設(shè)置sync_binlog=1,多個(gè)事務(wù)同時(shí)提交,
#同樣很大的影響MySQL和IO性能。按需設(shè)置。
sync_binlog = 1
# 二進(jìn)制日志自動(dòng)刪除/過(guò)期的天數(shù)。默認(rèn)值為0,表示不自動(dòng)刪除。
expire_logs_days = 7
#binlog_cache_size = 128m
#max_binlog_cache_size = 512m
#max_binlog_size = 256M
# 需要同步庫(kù)
binlog-do-db = dev
# 不需要同步庫(kù)
binlog-ignore-db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performation_schema
binlog_ignore_db = sys
datadir=/var/lib/mysql
設(shè)置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: 主庫(kù)200
設(shè)置my.cnf。
[mysqld]
lower_case_table_names = 1 # 表名不區(qū)分大小寫(xiě)
server-id = 200
log_bin = mysql-bin #開(kāi)始binlog記錄
binlog_format = MIXED
#每次事務(wù)提交,MySQL都會(huì)把binlog刷下去,是最安全但是性能損耗最大的設(shè)置。
#這樣的話,在數(shù)據(jù)庫(kù)所在的主機(jī)操作系統(tǒng)損壞或者突然掉電的情況下,系統(tǒng)才有可能丟失1個(gè)事務(wù)的數(shù)據(jù)
#但是binlog雖然是順序IO,但是設(shè)置sync_binlog=1,多個(gè)事務(wù)同時(shí)提交,
#同樣很大的影響MySQL和IO性能。按需設(shè)置。
sync_binlog = 1
# 二進(jìn)制日志自動(dòng)刪除/過(guò)期的天數(shù)。默認(rèn)值為0,表示不自動(dòng)刪除。
expire_logs_days = 7
#binlog_cache_size = 128m
#max_binlog_cache_size = 512m
#max_binlog_size = 256M
# 需要同步庫(kù)
binlog-do-db =dev
# 不需要同步庫(kù)
binlog-ignore-db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performation_schema
binlog_ignore_db = sys
datadir=/var/lib/mysql
設(shè)置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: 從庫(kù)300
設(shè)置my.cnf。
[mysqld]
lower_case_table_names = 1 # 表名不區(qū)分大小寫(xiě)
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
設(shè)置主庫(kù)信息
# mysql -uroot -p
# password: xxxxxx
# 設(shè)置主庫(kù)信息
# 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';
# 設(shè)置主庫(kù)信息
# mysql> flush privileges;
# start slave;
# mysql>show slave status \G
標(biāo)識(shí)同步成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
測(cè)試。
隨意主庫(kù):創(chuàng)建表,插入一條數(shù)據(jù)。
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 '電話號(hào)碼',
`create_date` datetime NULL COMMENT '創(chuàng)建時(shí)間',
`update_date` datetime NULL COMMENT '修改時(shí)間',
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');
從庫(kù)查詢
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
總結(jié)
到此這篇關(guān)于MySQL主從搭建(多主一從)的實(shí)現(xiàn)思路與步驟的文章就介紹到這了,更多相關(guān)MySQL主從搭建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Mysql多主一從數(shù)據(jù)備份的方法教程
- Centos7 Mysql 5.6 多主一從 解決方案與詳細(xì)配置
- MySQL8.0.18配置多主一從