欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL雙主(主主)架構(gòu)配置方案

 更新時(shí)間:2021年03月03日 10:26:43   作者:ygqygq2  
這篇文章主要介紹了MySQL雙主(主主)架構(gòu)配置方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在企業(yè)中,數(shù)據(jù)庫高可用一直是企業(yè)的重中之重,中小企業(yè)很多都是使用mysql主從方案,一主多從,讀寫分離等,但是單主存在單點(diǎn)故障,從庫切換成主庫需要作改動(dòng)。因此,如果是雙主或者多主,就會(huì)增加mysql入口,增加高可用。不過多主需要考慮自增長(zhǎng)ID問題,這個(gè)需要特別設(shè)置配置文件,比如雙主,可以使用奇偶,總之,主之間設(shè)置自增長(zhǎng)ID相互不沖突就能完美解決自增長(zhǎng)ID沖突問題。

主從同步復(fù)制原理

在開始之前,我們先來了解主從同步復(fù)制原理。

復(fù)制分成三步:

1. master將改變記錄到二進(jìn)制日志(binary log)中(這些記錄叫做二進(jìn)制日志事件,binary log events);
2. slave將master的binary log events拷貝到它的中繼日志(relay log);
3. slave重做中繼日志中的事件,將改變反映它自己的數(shù)據(jù)。

下圖描述了這一過程:

該過程的第一部分就是master記錄二進(jìn)制日志。在每個(gè)事務(wù)更新數(shù)據(jù)完成之前,master在二日志記錄這些改變。MySQL將事務(wù)串行的寫入二進(jìn)制日志,即使事務(wù)中的語句都是交叉執(zhí)行的。在事件寫入二進(jìn)制日志完成后,master通知存儲(chǔ)引擎提交事務(wù)。

下一步就是slave將master的binary log拷貝到它自己的中繼日志。首先,slave開始一個(gè)工作線程——I/O線程。I/O線程在master上打開一個(gè)普通的連接,然后開始binlog dump process。Binlog dump process從master的二進(jìn)制日志中讀取事件,如果已經(jīng)跟上master,它會(huì)睡眠并等待master產(chǎn)生新的事件。I/O線程將這些事件寫入中繼日志。

SQL slave thread處理該過程的最后一步。SQL線程從中繼日志讀取事件,更新slave的數(shù)據(jù),使其與master中的數(shù)據(jù)一致。只要該線程與I/O線程保持一致,中繼日志通常會(huì)位于OS的緩存中,所以中繼日志的開銷很小。

此外,在master中也有一個(gè)工作線程:和其它MySQL的連接一樣,slave在master中打開一個(gè)連接也會(huì)使得master開始一個(gè)線程。

MySQL5.6以前的版本復(fù)制過程有一個(gè)很重要的限制——復(fù)制在slave上是串行化的,也就是說master上的并行更新操作不能在slave上并行操作。 MySQL5.6版本參數(shù)slave-parallel-workers=1 表示啟用多線程功能。

MySQL5.6開始,增加了一個(gè)新特性,是加入了全局事務(wù) ID (GTID) 來強(qiáng)化數(shù)據(jù)庫的主備一致性,故障恢復(fù),以及容錯(cuò)能力。

官方文檔:http://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html

MySQL雙主(主主)架構(gòu)方案思路是:

1.兩臺(tái)mysql都可讀寫,互為主備,默認(rèn)只使用一臺(tái)(masterA)負(fù)責(zé)數(shù)據(jù)的寫入,另一臺(tái)(masterB)備用;
2.masterA是masterB的主庫,masterB又是masterA的主庫,它們互為主從;
3.兩臺(tái)主庫之間做高可用,可以采用keepalived等方案(使用VIP對(duì)外提供服務(wù));
4.所有提供服務(wù)的從服務(wù)器與masterB進(jìn)行主從同步(雙主多從);
5.建議采用高可用策略的時(shí)候,masterA或masterB均不因宕機(jī)恢復(fù)后而搶占VIP(非搶占模式);
這樣做可以在一定程度上保證主庫的高可用,在一臺(tái)主庫down掉之后,可以在極短的時(shí)間內(nèi)切換到另一臺(tái)主庫上(盡可能減少主庫宕機(jī)對(duì)業(yè)務(wù)造成的影響),減少了主從同步給線上主庫帶來的壓力;

但是也有幾個(gè)不足的地方:

1.masterB可能會(huì)一直處于空閑狀態(tài)(可以用它當(dāng)從庫,負(fù)責(zé)部分查詢);
2.主庫后面提供服務(wù)的從庫要等masterB先同步完了數(shù)據(jù)后才能去masterB上去同步數(shù)據(jù),這樣可能會(huì)造成一定程度的同步延時(shí);
架構(gòu)的簡(jiǎn)易圖如下:

主主環(huán)境(這里只介紹2臺(tái)主的配置方案):

1.CentOS 6.8 64位 2臺(tái):masterA(192.168.10.11),masterB(192.168.10.12)

2.官方Mysql5.6版本

搭建過程:

1.安裝MySQL服務(wù)(建議源碼安裝)

1.1 yum安裝依賴包

yum -y install make gcc gcc-c++ ncurses-devel bison openssl-devel

1.2 添加MySQL所需要的用戶和組

groupadd -g 27 mysql
adduser -u 27 -g mysql -s /sbin/nologin mysql

1.3 下載MySQL源碼包

mkdir -p /data/packages/src
cd /data/packages/
wget http://distfiles.macports.org/cmake/cmake-3.2.3.tar.gz
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.34.tar.gz

1.4 創(chuàng)建mysql數(shù)據(jù)目錄

mkdir -p /usr/local/mysql/data

1.5 解壓編譯安裝cmake、MySQL

cd /data/packages/src
tar -zxvf ../cmake-3.2.3.tar.gz
cd cmake-3.2.3/
./bootstrap
gmake
make install
cd ../
tar xf mysql-5.6.34.tar.gz
cd mysql-5.6.34
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc \
-DWITH_SSL=bundled -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/usr/local/mysql/data
make && make install

1.6 添加開機(jī)啟動(dòng)腳本

cp support-files/mysql.server /etc/rc.d/init.d/mysqld

1.7 添加masterA配置文件/etc/my.cnf

[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
basedir = /usr/local/mysql
port = 3306
socket = /tmp/mysql.sock
datadir = /usr/local/mysql/data
pid-file = /usr/local/mysql/data/mysql.pid
log-error = /usr/local/mysql/data/mysql.err

server-id = 1
auto_increment_offset = 1
auto_increment_increment = 2                      #奇數(shù)ID

log-bin = mysql-bin                           #打開二進(jìn)制功能,MASTER主服務(wù)器必須打開此項(xiàng)
binlog-format=ROW
binlog-row-p_w_picpath=minimal
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=0
sync_binlog=0
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
#expire_logs_days=5
max_binlog_size=1024M                          #binlog單文件最大值

replicate-ignore-db = mysql                       #忽略不同步主從的數(shù)據(jù)庫
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = test
replicate-ignore-db = zabbix

max_connections = 3000
max_connect_errors = 30

skip-character-set-client-handshake                   #忽略應(yīng)用程序想要設(shè)置的其他字符集
init-connect='SET NAMES utf8'                      #連接時(shí)執(zhí)行的SQL
character-set-server=utf8                        #服務(wù)端默認(rèn)字符集
wait_timeout=1800                            #請(qǐng)求的最大連接時(shí)間
interactive_timeout=1800                        #和上一參數(shù)同時(shí)修改才會(huì)生效
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES           #sql模式
max_allowed_packet = 10M
bulk_insert_buffer_size = 8M
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 4M
key_buffer_size = 256M
read_buffer_size = 16K

skip-name-resolve
slow_query_log=1
long_query_time = 6
slow_query_log_file=slow-query.log
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

[mysqldump]
quick
max_allowed_packet = 16M

[mysqld_safe]

1.8 特別參數(shù)說明

log-slave-updates = true   #將復(fù)制事件寫入binlog,一臺(tái)服務(wù)器既做主庫又做從庫此選項(xiàng)必須要開啟
#masterA自增長(zhǎng)ID
auto_increment_offset = 1
auto_increment_increment = 2                      #奇數(shù)ID
#masterB自增加ID
auto_increment_offset = 2
auto_increment_increment = 2                      #偶數(shù)ID

1.9 添加masterB配置文件/etc/my.cnf

[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
basedir = /usr/local/mysql
port = 3306
socket = /tmp/mysql.sock
datadir = /usr/local/mysql/data
pid-file = /usr/local/mysql/data/mysql.pid
log-error = /usr/local/mysql/data/mysql.err

server-id = 2
auto_increment_offset = 2
auto_increment_increment = 2                      #偶數(shù)ID

log-bin = mysql-bin                           #打開二進(jìn)制功能,MASTER主服務(wù)器必須打開此項(xiàng)
binlog-format=ROW
binlog-row-p_w_picpath=minimal
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=0
sync_binlog=0
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
#expire_logs_days=5
max_binlog_size=1024M                          #binlog單文件最大值

replicate-ignore-db = mysql                       #忽略不同步主從的數(shù)據(jù)庫
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = test
replicate-ignore-db = zabbix

max_connections = 3000
max_connect_errors = 30

skip-character-set-client-handshake                   #忽略應(yīng)用程序想要設(shè)置的其他字符集
init-connect='SET NAMES utf8'                      #連接時(shí)執(zhí)行的SQL
character-set-server=utf8                        #服務(wù)端默認(rèn)字符集
wait_timeout=1800                            #請(qǐng)求的最大連接時(shí)間
interactive_timeout=1800                        #和上一參數(shù)同時(shí)修改才會(huì)生效
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES           #sql模式
max_allowed_packet = 10M
bulk_insert_buffer_size = 8M
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 4M
key_buffer_size = 256M
read_buffer_size = 16K

skip-name-resolve
slow_query_log=1
long_query_time = 6
slow_query_log_file=slow-query.log
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

[mysqldump]
quick
max_allowed_packet = 16M

[mysqld_safe]

1.10 初始化MySQL

cd /usr/local/mysql
scripts/mysql_install_db --user=mysql

1.11 為啟動(dòng)腳本賦予可執(zhí)行權(quán)限并啟動(dòng)MySQL

chmod +x /etc/rc.d/init.d/mysqld
/etc/init.d/mysqld start

2. 配置主從同步

2.1 添加主從同步賬戶
masterA上:

mysql> grant replication slave on *.* to 'repl'@'192.168.10.12' identified by '123456';
mysql> flush privileges;

masterB上:

mysql> grant replication slave on *.* to 'repl'@'192.168.10.11' identified by '123456';
mysql> flush privileges;

2.2 查看主庫的狀態(tài)
masterA上:

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000003 |   120 |       |         |          |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

masterB上

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000003 |   437 |       |         |          |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

2.3 配置同步信息:

masterA上:

mysql> change master to master_host='192.168.10.12',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=437;

mysql> start slave;

mysql> show slave status\G;

顯示有如下狀態(tài)則正常:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

masterB上:

#本人是測(cè)試環(huán)境,可以保證沒數(shù)據(jù)寫入,否則需要的步驟是:先masterA鎖表-->masterA備份數(shù)據(jù)-->masterA解鎖表 -->masterB導(dǎo)入數(shù)據(jù)-->masterB設(shè)置主從-->查看主從

mysql> change master to master_host='192.168.10.11',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=120;

start slave;

mysql> show slave status\G;

顯示有如下狀態(tài)則正常:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

3.測(cè)試主從同步

3.1 在masterA上創(chuàng)建一個(gè)數(shù)據(jù)庫測(cè)試同步效果

mysql> show databases;

+--------------------+

| Database      |

+--------------------+

| information_schema |

| mysql       |

| performance_schema |

| test        |

+--------------------+

4 rows in set (0.00 sec)

mysql> create database test01;

Query OK, 1 row affected (0.00 sec)

mysql> show databases;

+--------------------+

| Database      |

+--------------------+

| information_schema |

| mysql       |

| performance_schema |

| test        |

| test01       |

+--------------------+

5 rows in set (0.00 sec)

mysql> quit

Bye

[root@masterA data]#

3.2 到masterB查看是否已經(jīng)同步創(chuàng)建數(shù)據(jù)庫

mysql> show databases;

+--------------------+

| Database      |

+--------------------+

| information_schema |

| mysql       |

| performance_schema |

| test        |

| test01       |

+--------------------+

5 rows in set (0.00 sec)

mysql> quit

Bye

[root@masterB data]#

4. 開啟MySQL5.6的GTID功能

masterA和masterB分別執(zhí)行如下命令:

mysql> stop slave;

Query OK, 0 rows affected (0.00 sec)

mysql> change master to MASTER_AUTO_POSITION=1;

Query OK, 0 rows affected (0.01 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

5. 遇到的問題

一種主從報(bào)錯(cuò)折騰了我半天:

Last_IO_Errno: 1236

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not open log file'

后面修改主從同步相關(guān) 參數(shù),確認(rèn)原因是my.cnf增加了如下參數(shù):

log-bin = mysql-bin

relay-log = mysql-bin

從正常主主同步時(shí)的二進(jìn)制日志文件顯示,有2套二進(jìn)制日志。因此推斷上面2個(gè)參數(shù)導(dǎo)致不能產(chǎn)生2套二進(jìn)制文件,故導(dǎo)致二進(jìn)制文件錯(cuò)亂和丟失。

到此這篇關(guān)于MySQL雙主(主主)架構(gòu)配置方案的文章就介紹到這了,更多相關(guān)MySQL 雙主內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL 中定義和使用變量的方法

    MySQL 中定義和使用變量的方法

    MySQL 提供了多種類型的變量,以適應(yīng)不同的應(yīng)用場(chǎng)景,用戶定義的變量適用于簡(jiǎn)單的會(huì)話內(nèi)數(shù)據(jù)傳遞,局部變量適合在復(fù)雜的存儲(chǔ)過程中使用,而會(huì)話變量則用于調(diào)整和優(yōu)化數(shù)據(jù)庫會(huì)話的行為,這篇文章主要介紹了MySQL 中定義和使用變量,需要的朋友可以參考下
    2024-04-04
  • mysql時(shí)間字段默認(rèn)設(shè)置為當(dāng)前時(shí)間實(shí)例代碼

    mysql時(shí)間字段默認(rèn)設(shè)置為當(dāng)前時(shí)間實(shí)例代碼

    很多人可能會(huì)把日期類型的字段的類型設(shè)置為date或者datetime,
    但是這兩個(gè)類型是無法設(shè)置默認(rèn)值為當(dāng)前日期的,下面這篇文章主要給大家介紹了關(guān)于mysql時(shí)間字段默認(rèn)設(shè)置為當(dāng)前時(shí)間的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(七)--查詢

    與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(七)--查詢

    在這個(gè)《與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得》系列里面,我一直都把MYSQL跟SQLSERVER進(jìn)行比較,相互進(jìn)行比較是學(xué)習(xí)一樣?xùn)|西比較好的方法
    2014-08-08
  • MySQL深入淺出掌握觸發(fā)器用法

    MySQL深入淺出掌握觸發(fā)器用法

    觸發(fā)器是SQLserver提供給程序員和數(shù)據(jù)分析員來保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲(chǔ)過程,事件是在 MySQL 5.1后引入的,有點(diǎn)類似操作系統(tǒng)的計(jì)劃任務(wù),但是周期性任務(wù)是內(nèi)置在MySQL服務(wù)端執(zhí)行的
    2022-05-05
  • 分享15個(gè)Mysql索引失效的場(chǎng)景

    分享15個(gè)Mysql索引失效的場(chǎng)景

    這篇文章主要介紹了分享15個(gè)Mysql索引失效的場(chǎng)景,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • MySQL5.7慢查詢?nèi)罩緯r(shí)間與系統(tǒng)時(shí)間差8小時(shí)原因詳解

    MySQL5.7慢查詢?nèi)罩緯r(shí)間與系統(tǒng)時(shí)間差8小時(shí)原因詳解

    這篇文章主要介紹了MySQL5.7慢查詢?nèi)罩緯r(shí)間與系統(tǒng)時(shí)間差8小時(shí)原因詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • mysql數(shù)據(jù)庫 主從復(fù)制的配置方法

    mysql數(shù)據(jù)庫 主從復(fù)制的配置方法

    本文主要介紹 mysql數(shù)據(jù)庫 主從負(fù)責(zé)的配置方法,在做數(shù)據(jù)庫開發(fā)的時(shí)候有時(shí)候會(huì)遇到,這里做出詳細(xì)流程,大家可以參考下
    2016-07-07
  • MySQL性能分析工具profile使用教程

    MySQL性能分析工具profile使用教程

    這篇文章主要介紹了MySQL性能分析工具profile使用教程,本文描述了如何使用MySQL profile,不涉及具體的樣例分析,需要的朋友可以參考下
    2014-10-10
  • MySQL explain 中列的取值及含義講解

    MySQL explain 中列的取值及含義講解

    這篇文章主要介紹了MySQL explain 中列的取值及含義,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • mysql5.7數(shù)據(jù)庫安裝完成后如何配置環(huán)境變量

    mysql5.7數(shù)據(jù)庫安裝完成后如何配置環(huán)境變量

    這篇文章主要為大家詳細(xì)介紹了在win10系統(tǒng)下,mysql5.7數(shù)據(jù)庫安裝完成后配置環(huán)境變量的具體步驟,感興趣的小伙伴們可以參考一下
    2016-06-06

最新評(píng)論