日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Linux下MySQL 5.7 主从复制(主从同步)

發(fā)布時(shí)間:2025/3/20 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux下MySQL 5.7 主从复制(主从同步) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先要準(zhǔn)備兩臺(tái)服務(wù)器,一臺(tái)主服務(wù)器(Master),另一臺(tái)從服務(wù)器(Slave),然后要保證Master與Slave的版本要相同且Master不能高于Slave的版本,一般穩(wěn)健的做法都是使其版本相同,因?yàn)镸ySQL不同版本之間的binlog(二進(jìn)制日志)格式可能會(huì)不一樣,最后會(huì)導(dǎo)致同步出現(xiàn)異常。

一、環(huán)境:

軟件環(huán)境

系統(tǒng):CentOS 6. 或 7.
MySQL版本:5.7

主機(jī)設(shè)置:

IP主機(jī)名角色
192.168.1.101MySQL-001master
192.168.1.102MySQL-002slave

二、Mysql主從基本原理

Mysql的主從同步就是當(dāng)master(主庫)發(fā)生數(shù)據(jù)變化的時(shí)候,會(huì)實(shí)時(shí)同步到slave(從庫)。
主從復(fù)制可以水平擴(kuò)展數(shù)據(jù)庫的負(fù)載能力,容錯(cuò),高可用,數(shù)據(jù)備份。
不管是delete、update、insert,還是創(chuàng)建函數(shù)、存儲(chǔ)過程,都是在master上,當(dāng)master有操作的時(shí)候,slace會(huì)快速的接受到這些操作,從而做同步。

主要的實(shí)現(xiàn)原理

  • 在master機(jī)器上,主從同步時(shí)間會(huì)被寫道特殊的log文件中(binary-log);
  • 在slave機(jī)器上,slave讀取主從同步事件,并根據(jù)讀取的事件變化,在slave庫上做相應(yīng)的更改。

詳細(xì)的主從同步主要有三種形式:statement、row、mixed

  • statement:會(huì)將對(duì)數(shù)據(jù)庫操作的sql語句寫道binlog中
  • row:會(huì)將每一條數(shù)據(jù)的變化寫道binlog中。
  • mixed:statement與row的混合。Mysql決定什么時(shí)候?qū)憇tatement格式的,什么時(shí)候?qū)憆ow格式的binlog。

在master機(jī)器上的操作:

當(dāng)master上的數(shù)據(jù)發(fā)生變化的時(shí)候,該事件變化會(huì)按照順序?qū)懭隻inlog中。當(dāng)slave鏈接到master的時(shí)候,master機(jī)器會(huì)為slave開啟binlog dunp線程。當(dāng)master的binlog發(fā)生變化的時(shí)候,binlog dump線程會(huì)通知slave,并將相應(yīng)的binlog內(nèi)容發(fā)送給slave。

在slave機(jī)器上操作:

當(dāng)主從同步開啟的時(shí)候,slave上會(huì)創(chuàng)建兩個(gè)線程:I\O線程。該線程連接到master機(jī)器,master機(jī)器上的binlog dump 線程會(huì)將binlog的內(nèi)容發(fā)送給該I\O線程。該I/O線程接收到binlog內(nèi)容后,再將內(nèi)容寫入到本地的relay log;sql線程。該線程讀取到I/O線程寫入的ralay log。并且根據(jù)relay log。并且根據(jù)relay log 的內(nèi)容對(duì)slave數(shù)據(jù)庫做相應(yīng)的操作。

三、主從配置

1、master配置文件設(shè)置

一般mysql配置文件在/etc/my.cnf

(如果找不到的話也有可能在這些目錄下:/etc/mysql/my.cnf,/usr/local/mysql/etc/my.cnf,~/.my.cnf)

[root@MySQL-001 ~]# vim /etc/my.cnf [mysqld] basedir=/usr/local/mysql datadir=/data/mysqldata socket=/tmp/mysql.sock user=mysql port=3306# master的配置 server-id=1 # 服務(wù)器id (設(shè)置唯一標(biāo)識(shí)) binlog-do-db=employees # 要給從機(jī)同步的庫 binlog-ignore-db=mysql # 不給從機(jī)同步的庫(多個(gè)寫多行) binlog-ignore-db=information_schema binlog-ignore-db=performance_schema binlog-ignore-db=sys log-bin=mysql-bin # 打開日志(主機(jī)需要打開),可以指定絕對(duì)路徑; expire_logs_days=90 # 自動(dòng)清理 90 天前的log文件,可根據(jù)需要修改

重啟數(shù)據(jù)庫使配置生效:

CentOS 6.*:
[root@MySQL-001 ~]# service mysqld restart [root@MySQL-001 ~]# service mysqld statusSUCCESS! MySQL running (15607)
CentOS 7.*:
[root@MySQL-001 ~]# systemctl restart mysqld.service[root@MySQL-001 ~]# systemctl status mysqld.servicemysqld.service - MySQL ServerLoaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled)Active: active (running) since 四 2018-05-17 11:42:02 CST; 2h 5min agoDocs: man:mysqld(8)http://dev.mysql.com/doc/refman/en/using-systemd.htmlMain PID: 29959 (mysqld)CGroup: /system.slice/mysqld.service└─29959 /opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf5月 17 11:42:02 tcloud-118 systemd[1]: Started MySQL Server.
測試log_bin是否成功開啟
[root@MySQL-001 ~]# mysql -uroot -p mysql> show variables like '%log_bin%'; +---------------------------------+---------------------------------+ | Variable_name | Value | +---------------------------------+---------------------------------+ | log_bin | ON | | log_bin_basename | /opt/mysql/logs/mysql-bin | | log_bin_index | /opt/mysql/logs/mysql-bin.index | | log_bin_trust_function_creators | ON | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+---------------------------------+ 6 rows in set (0.00 sec)mysql>

可以看到log_bin為ON;

2、master的數(shù)據(jù)庫中建立主從同步賬號(hào)backup:

backup為用戶名,192.168.1.%表示只允許192.168.1網(wǎng)段的客戶端連接,123456為密碼;

mysql> grant replication slave on *.* to 'backup'@'192.168.1.%' identified by '123456'; # 創(chuàng)建同步賬戶 mysql> flush privileges; # 刷新權(quán)限 mysql> select Host,User,authentication_string from mysql.user; # 檢查是否創(chuàng)建 +--------------+---------------+-------------------------------------------+ | Host | User | authentication_string | +--------------+---------------+-------------------------------------------+ | localhost | root | *6C362347EBEAA7DF44F6D34884615A35095E80EB | | localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | 192.168.1.% | backup | *9BB58B7F11A03B83C396FF506F3DF45727E79614 | +--------------+---------------+-------------------------------------------+ 5 rows in set (0.00 sec)mysql>

backup@192.168.1.%賬戶已建立;

3、Master鎖表

重啟MySQL服務(wù)并設(shè)置讀取鎖定,讀取鎖定的意思是只能讀取,不能更新,以便獲得一個(gè)一致性的快照;

mysql> flush table with read lock; # 主庫鎖表;默認(rèn)28800秒,即8小時(shí)自動(dòng)解鎖; mysql> show master status \G *************************** 1. row ***************************File: mysql-bin.000002Position: 1621Binlog_Do_DB:Binlog_Ignore_DB: mysql Executed_Gtid_Set: 1d3d078c-59a7-11e8-9a08-00163e000b3f:1-7 1 row in set (0.00 sec)mysql>

查看主服務(wù)器上當(dāng)前的二進(jìn)制日志名和偏移量值這里的file 和position 要和上面的一致;
導(dǎo)出master(192.168.1.101)上的數(shù)據(jù),然后導(dǎo)入slave 中

4、拷貝數(shù)據(jù)庫至從庫(slave)

master:

格式:mysqldump -uUSER -pPASSWORD DATABASE TABLE > NAME.sql

[root@MySQL-001 ~]# mysqldump -uroot -p employees > /opt/employees.sql # 假如employees為主庫已經(jīng)存在的庫 [root@MySQL-001 ~]# yum install openssh-clients -y # 可選 [root@MySQL-001 ~]# scp /opt/employees.sql root@192.168.1.102:/opt/

slave:

[root@MySQL-002 ~]# yum install openssh-clients -y # 可選

5、配置slave(192.168.1.102)

[root@MySQL-002 ~]# vim /etc/my.cnf [mysqld] basedir=/usr/local/mysql # mysql程序路徑 datadir=/data/mysqldata # mysql數(shù)據(jù)目錄 socket=/tmp/mysql.sock user=mysql port=3306# slave配置 server-id=2 # MySQLid 后面2個(gè)從服務(wù)器需設(shè)置不同 skip_slave_start=1 # 復(fù)制進(jìn)程不會(huì)隨著數(shù)據(jù)庫的啟動(dòng)而啟動(dòng),重啟數(shù)據(jù)庫后需手動(dòng)啟動(dòng); #加上以下參數(shù)可以避免更新不及時(shí),SLAVE 重啟后導(dǎo)致的主從復(fù)制出錯(cuò)。 read_only = 1 # 從庫普通賬戶只讀; master_info_repository=TABLE relay_log_info_repository=TABLE #relay_log_recovery=1 # 從機(jī)禁止寫 #super_read_only=1 # 從機(jī)禁止寫

重啟數(shù)據(jù)庫

CentOS 6.*:

[root@MySQL-002 ~]# service mysqld restart [root@MySQL-002 ~]# service mysqld statusSUCCESS! MySQL running (15604)

CentOS 7.*:

[root@MySQL-002 ~]# systemctl restart mysqld.service [root@MySQL-002 ~]# systemctl status mysqld.service mysqld.service - MySQL ServerLoaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled)Active: active (running) since 四 2018-05-17 11:42:02 CST; 2h 5min agoDocs: man:mysqld(8)http://dev.mysql.com/doc/refman/en/using-systemd.htmlMain PID: 29959 (mysqld)CGroup: /system.slice/mysqld.service└─29959 /opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf5月 17 11:42:02 tcloud-118 systemd[1]: Started MySQL Server.

然后導(dǎo)入到mysql數(shù)據(jù)庫中,slave上的employees數(shù)據(jù)庫不存在則先創(chuàng)建,然后再導(dǎo)入

[root@MySQL-002 ~]# mysql -uroot -p mysql> create database employees; # 新建這個(gè)庫 [root@MySQL-002 ~]# mysql -uroot -p employees < /opt/employees.sql

登錄slave數(shù)據(jù)庫,并做如下設(shè)置

[root@MySQL-002 ~]# mysql -uroot -p mysql> stop slave; # 關(guān)閉slave同步,第一次可略過; mysql> change master to -> master_host='192.168.1.101', # master的ip -> master_user='backup', # 備份用戶名 -> master_password='123456', # 密碼 -> master_log_file='mysql-bin.000002', # 三.3,且要與master的參數(shù)一致 -> master_log_pos=1621; # 三.3,且要與master的參數(shù)一致

合寫為:

mysql> change master to master_host='192.168.1.101', master_user='backup', master_password='123456', master_log_file='mysql-bin.000002', master_log_pos=1621; mysql> start slave; # 啟動(dòng)同步 mysql> show slave status \G # 查看slave從機(jī)的狀態(tài) *************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.1.101Master_User: backupMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000002Read_Master_Log_Pos: 1621Relay_Log_File: relay-bin.000002Relay_Log_Pos: 320Relay_Master_Log_File: mysql-bin.000002Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB: mysqlReplicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 1621Relay_Log_Space: 521Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id: 101Master_UUID: 1d3d078c-59a7-11e8-9a08-00163e000b3fMaster_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set: 5037e479-59a7-11e8-a35b-00163e000402:1-3Auto_Position: 0Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version: 1 row in set (0.00 sec)mysql>

下面對(duì)應(yīng)參數(shù)相同代表設(shè)置成功,0延時(shí);

Slave_IO_Running: YesSlave_SQL_Running: YesSeconds_Behind_Master: 0

參數(shù)說明:

  • Master_Log_File: SLAVE中的I/O線程當(dāng)前正在讀取的主服務(wù)器二進(jìn)制日志文件的名稱
  • Read_Master_Log_Pos: 在當(dāng)前的主服務(wù)器二進(jìn)制日志中,SLAVE中的I/O線程已經(jīng)讀取的位置
  • Relay_Log_File: SQL線程當(dāng)前正在讀取和執(zhí)行的中繼日志文件的名稱
  • Relay_Log_Pos: 在當(dāng)前的中繼日志中,SQL線程已讀取和執(zhí)行的位置
  • Relay_Master_Log_File: 由SQL線程執(zhí)行的包含多數(shù)近期事件的主服務(wù)器二進(jìn)制日志文件的名稱
  • Slave_IO_Running: I/O線程是否被啟動(dòng)并成功地連接到主服務(wù)器上
  • Slave_SQL_Running: SQL線程是否被啟動(dòng)
  • Seconds_Behind_Master: 從屬服務(wù)器SQL線程和從屬服務(wù)器I/O線程之間的時(shí)間差距,單位以秒計(jì)。

關(guān)閉主數(shù)據(jù)庫的讀鎖定

mysql> unlock tables;

四、測試主從復(fù)制

1、在marster中創(chuàng)建一個(gè)新表再查看slave中是否有數(shù)據(jù)

master:

mysql> use employees; mysql> create table test001(id int auto_increment primary key,name varchar(20) not null); mysql> insert into test001 values(null,'will'); mysql> insert into test001 values(null,'jim'); mysql> insert into test001 values(null,'tom'); mysql> select * from employees.test001; +----+------+ | id | name | +----+------+ | 1 | will | | 2 | jim | | 3 | tom | +----+------+ 3 rows in set (0.01 sec)

slave:

mysql> use employees; mysql> select * from employees.test001; +----+------+ | id | name | +----+------+ | 1 | will | | 2 | jim | | 3 | tom | +----+------+

2、重啟關(guān)閉從數(shù)據(jù)庫,主刪除test001表,然后主從數(shù)據(jù)庫都重啟看是否正常

master:

mysql> drop table employees.test001;

slave:

mysql> use employees; mysql> show tables;

以上實(shí)驗(yàn)證明主從同步成功!!!

五、mysql數(shù)據(jù)庫從庫同步的延遲問題

1、從庫同步延遲一般出現(xiàn)的情況

1、show slave status 顯示參數(shù) Seconds_Behind_Master不為0,這個(gè)數(shù)值可能會(huì)很大
2、show slave status 顯示參數(shù) Relay_Master_Log_File和Master_Log_File顯示bin-log的編號(hào)相差很大,說明bin-log在從庫上沒有及時(shí)同步,所以近期執(zhí)行的bin-log和當(dāng)前IO線程所讀的bin-log相差很大
3、mysql的從庫數(shù)據(jù)目錄下存在大量mysql-relay-log日志,該日志同步完成之后就會(huì)被系統(tǒng)自動(dòng)刪除,存在大量日志,說明主從同步延遲很厲害

2、MySQL數(shù)據(jù)庫主從同步延遲原理

mysql主從同步原理:
主庫針對(duì)寫操作,順序?qū)慴inlog,從庫單線程去主庫順序讀”寫操作的binlog”,從庫取到binlog在本地原樣執(zhí)行(隨機(jī)寫),來保證主從數(shù)據(jù)邏輯上一致。
mysql的主從復(fù)制都是單線程的操作,主庫對(duì)所有DDL和DML產(chǎn)生binlog,binlog是順序?qū)?#xff0c;所以效率很高,slave的Slave_IO_Running線程到主庫取日志,效率比較高,下一步,問題來了,slave的Slave_SQL_Running線程將主庫的DDL和DML操作在slave實(shí)施。DML和DDL的IO操作是隨即的,不是順序的,成本高很多,還可能可slave上的其他查詢產(chǎn)生lock爭用,由于Slave_SQL_Running也是單線程的,所以一個(gè)DDL卡主了,需要執(zhí)行10分鐘,那么所有之后的DDL會(huì)等待這個(gè)DDL執(zhí)行完才會(huì)繼續(xù)執(zhí)行,這就導(dǎo)致了延時(shí)。
有朋友會(huì)問:“主庫上那個(gè)相同的DDL也需要執(zhí)行10分,為什么slave會(huì)延時(shí)?”,答案是master可以并發(fā),Slave_SQL_Running線程卻不可以。

3、MySQL數(shù)據(jù)庫主從同步延遲是怎么產(chǎn)生的?

當(dāng)主庫的TPS并發(fā)較高時(shí),產(chǎn)生的DDL數(shù)量超過slave一個(gè)sql線程所能承受的范圍,那么延時(shí)就產(chǎn)生了,當(dāng)然還有就是可能與slave的大型query語句產(chǎn)生了鎖等待。
首要原因:數(shù)據(jù)庫在業(yè)務(wù)上讀寫壓力太大,CPU計(jì)算負(fù)荷大,網(wǎng)卡負(fù)荷大,硬盤隨機(jī)IO太高
次要原因:讀寫binlog帶來的性能影響,網(wǎng)絡(luò)傳輸延遲。

可以通過mysqlbinlog具體查看在哪個(gè)語句卡住,

mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS /usr/local/mysql/log/relay-bin.004764 --start-position=94813395 |more

其中:

  • 主從狀態(tài)查詢"show slave status \G;"語句中的Relay_Log_File顯示從庫執(zhí)行到的日志文件:/usr/local/mysql/log/relay-bin.004764
  • 主從狀態(tài)查詢"show slave status \G;"語句中的Relay_Log_Pos顯示從庫執(zhí)行到的日志語句:94813395

查詢當(dāng)前正在寫入的binlog里哪個(gè)表調(diào)用的次數(shù)最多

mysqlbinlog mysql-bin.001314 | awk '/Table_map/{print $11}'|sort |uniq -c|sort -n

4、MySQL數(shù)據(jù)庫主從同步延遲解決方案。

架構(gòu)方面

1.業(yè)務(wù)的持久化層的實(shí)現(xiàn)采用分庫架構(gòu),mysql服務(wù)可平行擴(kuò)展,分散壓力。
2.單個(gè)庫讀寫分離,一主多從,主寫從讀,分散壓力。這樣從庫壓力比主庫高,保護(hù)主庫。
3.服務(wù)的基礎(chǔ)架構(gòu)在業(yè)務(wù)和mysql之間加入memcache或者redis的cache層。降低mysql的讀壓力。
4.不同業(yè)務(wù)的mysql物理上放在不同機(jī)器,分散壓力。
5.使用比主庫更好的硬件設(shè)備作為slave

總結(jié),mysql壓力小,延遲自然會(huì)變小。

硬件方面

1.采用好服務(wù)器,比如4u比2u性能明顯好,2u比1u性能明顯好。
2.存儲(chǔ)用ssd或者盤陣或者san,提升隨機(jī)寫的性能。
3.主從間保證處在同一個(gè)交換機(jī)下面,并且是萬兆環(huán)境。
總結(jié),硬件強(qiáng)勁,延遲自然會(huì)變小。一句話,縮小延遲的解決方案就是花錢和花時(shí)間。

5、mysql主從同步加速方法

1、sync_binlog在slave端設(shè)置為0
2、–logs-slave-updates 從服務(wù)器從主服務(wù)器接收到的更新不記入它的二進(jìn)制日志。
3、直接禁用slave端的binlog
4、slave端,如果使用的存儲(chǔ)引擎是innodb,innodb_flush_log_at_trx_commit =2

6、sync_binlog與innodb_flush_log_at_trx_commit參數(shù)

主庫是寫,對(duì)數(shù)據(jù)安全性較高,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之類的設(shè)置是需要的
而slave則不需要這么高的數(shù)據(jù)安全,完全可以講sync_binlog設(shè)置為0或者關(guān)閉binlog,innodb_flushlog也可以設(shè)置為0來提高sql的執(zhí)行效率

sync_binlog

MySQL提供一個(gè)sync_binlog參數(shù)來控制數(shù)據(jù)庫的binlog刷到磁盤上去。
默認(rèn),sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系統(tǒng)自己控制它的緩存的刷新。這時(shí)候的性能是最好的,但是風(fēng)險(xiǎn)也是最大的。一旦系統(tǒng)Crash,在binlog_cache中的所有binlog信息都會(huì)被丟失。
如果sync_binlog>0,表示每sync_binlog次事務(wù)提交,MySQL調(diào)用文件系統(tǒng)的刷新操作將緩存刷下去。最安全的就是sync_binlog=1了,表示每次事務(wù)提交,MySQL都會(huì)把binlog刷下去,是最安全但是性能損耗最大的設(shè)置。這樣的話,在數(shù)據(jù)庫所在的主機(jī)操作系統(tǒng)損壞或者突然掉電的情況下,系統(tǒng)才有可能丟失1個(gè)事務(wù)的數(shù)據(jù)。
但是binlog雖然是順序IO,但是設(shè)置sync_binlog=1,多個(gè)事務(wù)同時(shí)提交,同樣很大的影響MySQL和IO性能。
雖然可以通過group commit的補(bǔ)丁緩解,但是刷新的頻率過高對(duì)IO的影響也非常大。對(duì)于高并發(fā)事務(wù)的系統(tǒng)來說,
“sync_binlog”設(shè)置為0和設(shè)置為1的系統(tǒng)寫入性能差距可能高達(dá)5倍甚至更多。
所以很多MySQL DBA設(shè)置的sync_binlog并不是最安全的1,而是2或者是0。這樣犧牲一定的一致性,可以獲得更高的并發(fā)和性能。
默認(rèn)情況下,并不是每次寫入時(shí)都將binlog與硬盤同步。因此如果操作系統(tǒng)或機(jī)器(不僅僅是MySQL服務(wù)器)崩潰,有可能binlog中最后的語句丟失了。要想防止這種情況,你可以使用sync_binlog全局變量(1是最安全的值,但也是最慢的),使binlog在每N次binlog寫入后與硬盤同步。即使sync_binlog設(shè)置為1,出現(xiàn)崩潰時(shí),也有可能表內(nèi)容和binlog內(nèi)容之間存在不一致性。

innodb_flush_log_at_trx_commit

抱怨Innodb比MyISAM慢100倍?那么你大概是忘了調(diào)整這個(gè)值。
默認(rèn)值1的意思是每一次事務(wù)提交或事務(wù)外的指令都需要把日志寫入(flush)硬盤,這是很費(fèi)時(shí)的。特別是使用電池供電緩存(Battery backed up cache)時(shí)。
設(shè)成2對(duì)于很多運(yùn)用,特別是從MyISAM表轉(zhuǎn)過來的是可以的,它的意思是不寫入硬盤而是寫入系統(tǒng)緩存。日志仍然會(huì)每秒flush到硬盤,所以你一般不會(huì)丟失超過1-2秒的更新。
設(shè)成0會(huì)更快一點(diǎn),但安全方面比較差,即使MySQL掛了也可能會(huì)丟失事務(wù)的數(shù)據(jù)。而值2只會(huì)在整個(gè)操作系統(tǒng) 掛了時(shí)才可能丟數(shù)據(jù)。

7、從文件系統(tǒng)本身屬性角度優(yōu)化

master端
修改linux、Unix文件系統(tǒng)中文件的etime屬性, 由于每當(dāng)讀文件時(shí)OS都會(huì)將讀取操作發(fā)生的時(shí)間回寫到磁盤上,對(duì)于讀操作頻繁的數(shù)據(jù)庫文件來說這是沒必要的,只會(huì)增加磁盤系統(tǒng)的負(fù)擔(dān)影響I/O性能。可以通過設(shè)置文件系統(tǒng)的mount屬性,組織操作系統(tǒng)寫atime信息,在linux上的操作為:
打開/etc/fstab,加上noatime參數(shù)

/dev/sdb1 /data reiserfs noatime 1 2

然后重新mount文件系統(tǒng)

mount -oremount /data

參考

http://www.cnblogs.com/zhoujinyi/p/5704567.html?tdsourcetag=s_pcqq_aiomsg

轉(zhuǎn)載于:https://blog.51cto.com/moerjinrong/2133121

總結(jié)

以上是生活随笔為你收集整理的Linux下MySQL 5.7 主从复制(主从同步)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。