MySQL主從搭建(多主一從)的實(shí)現(xiàn)思路與步驟
背景:
由于最近公司項目好像有點(diǎn)受不住并發(fā)壓力了,優(yōu)化迫在眉睫。由于當(dāng)前系統(tǒng)是單數(shù)據(jù)庫系統(tǒng)原因,能優(yōu)化的地方也盡力優(yōu)化了但是數(shù)據(jù)庫瓶頸還是嚴(yán)重限制了項目的并發(fā)能力。所以就考慮了添加數(shù)據(jù)庫來增大項目并發(fā)能力。
思路:
1: 創(chuàng)建集中庫: 主要就是存儲歷史數(shù)據(jù)。作為查詢使用。
2:創(chuàng)建多個業(yè)務(wù)庫:滿足項目高并發(fā)的能力。
demo環(huán)境:
1: VM ware 虛擬機(jī) - centOS 7
centOS-1: 192.168.194.3 主 100-------業(yè)務(wù)庫
centOS-2: 192.168.194.4 主 200-------業(yè)務(wù)庫
centOS-3: 192.168.194.5 從 300-------相當(dāng)于集中庫
2:mysql 5.7
步驟
1: 主庫100
設(shè)置my.cnf。
[mysqld] lower_case_table_names = 1 # 表名不區(qū)分大小寫 server-id = 100 log_bin = mysql-bin #開始binlog記錄 binlog_format = MIXED #每次事務(wù)提交,MySQL都會把binlog刷下去,是最安全但是性能損耗最大的設(shè)置。 #這樣的話,在數(shù)據(jù)庫所在的主機(jī)操作系統(tǒng)損壞或者突然掉電的情況下,系統(tǒng)才有可能丟失1個事務(wù)的數(shù)據(jù) #但是binlog雖然是順序IO,但是設(shè)置sync_binlog=1,多個事務(wù)同時提交, #同樣很大的影響MySQL和IO性能。按需設(shè)置。 sync_binlog = 1 # 二進(jìn)制日志自動刪除/過期的天數(shù)。默認(rèn)值為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
設(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: 主庫200
設(shè)置my.cnf。
[mysqld] lower_case_table_names = 1 # 表名不區(qū)分大小寫 server-id = 200 log_bin = mysql-bin #開始binlog記錄 binlog_format = MIXED #每次事務(wù)提交,MySQL都會把binlog刷下去,是最安全但是性能損耗最大的設(shè)置。 #這樣的話,在數(shù)據(jù)庫所在的主機(jī)操作系統(tǒng)損壞或者突然掉電的情況下,系統(tǒng)才有可能丟失1個事務(wù)的數(shù)據(jù) #但是binlog雖然是順序IO,但是設(shè)置sync_binlog=1,多個事務(wù)同時提交, #同樣很大的影響MySQL和IO性能。按需設(shè)置。 sync_binlog = 1 # 二進(jìn)制日志自動刪除/過期的天數(shù)。默認(rèn)值為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
設(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: 從庫300
設(shè)置my.cnf。
[mysqld] lower_case_table_names = 1 # 表名不區(qū)分大小寫 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è)置主庫信息
# mysql -uroot -p # password: xxxxxx # 設(shè)置主庫信息 # 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è)置主庫信息 # mysql> flush privileges; # start slave; # mysql>show slave status \G
標(biāo)識同步成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
測試。
隨意主庫:創(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 '電話號碼', `create_date` datetime NULL COMMENT '創(chuàng)建時間', `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
總結(jié)
到此這篇關(guān)于MySQL主從搭建(多主一從)的實(shí)現(xiàn)思路與步驟的文章就介紹到這了,更多相關(guān)MySQL主從搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql存儲過程之創(chuàng)建(CREATE PROCEDURE)和調(diào)用(CALL)及變量創(chuàng)建(DECLARE)和賦值(SET
這篇文章主要介紹了mysql存儲過程之創(chuàng)建(CREATE PROCEDURE)和調(diào)用(CALL)及變量創(chuàng)建(DECLARE)和賦值(SET)操作方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了mysql存儲過程創(chuàng)建、調(diào)用及變量創(chuàng)建、賦值具體原理、操作技巧與相關(guān)注意事項,需要的朋友可以參考下2019-12-12mysql8.0.23 linux(centos7)安裝完整超詳細(xì)教程
這篇文章主要介紹了mysql8.0.23 linux(centos7)安裝完整超詳細(xì)教程,本文給介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01window10下mysql 8.0.20 安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了window10下mysql 8.0.20 安裝配置方法圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-05-05MySQL數(shù)據(jù)類型之淺談字符串(string)
這篇文章主要介紹了MySQL數(shù)據(jù)類型之字符串(string)的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10MySQL?UPDATE多表關(guān)聯(lián)更新的實(shí)現(xiàn)示例
MySQL可以基于多表查詢更新數(shù)據(jù),本文主要介紹了MySQL?UPDATE多表關(guān)聯(lián)更新的實(shí)現(xiàn)示例,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08MySQL不使用order by實(shí)現(xiàn)排名的三種思路總結(jié)
ORDER BY語句用于根據(jù)指定的列對結(jié)果集進(jìn)行排序,在日常開發(fā)中也經(jīng)常會用到,但下面這篇文章主要給大家介紹了關(guān)于MySQL不使用order by實(shí)現(xiàn)排名的三種思路,需要的朋友可以參考下2021-06-06