<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你MySQL主從復(fù)制,配置不成功你找我!

          共 7329字,需瀏覽 15分鐘

           ·

          2021-02-02 09:59

          點擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,

          設(shè)為“置頂或星標(biāo)”,第一時間送達(dá)干貨

          之前很多小伙伴想知道MySQL主從復(fù)制的配置步驟,今天它來了。帶著你可能碰到的各種異常來了。


          配置環(huán)境

          操作系統(tǒng):兩臺CentOS 7.6的Linux系統(tǒng)

          數(shù)據(jù)庫版本:MySQL 5.6.39

          主服務(wù)器IP:192.168.0.1

          從服務(wù)器IP:192.168.0.2



          安裝數(shù)據(jù)庫

          之前已經(jīng)給小伙伴們詳細(xì)的講解了CentOS安裝MySQL的操作步驟了,還沒看過的小伙伴可以戳這里:

          Linux環(huán)境下安裝MySQL步驟詳解



          配置前提

          1、需要保證3306端口開啟或關(guān)閉防火墻,在MySQL的安裝里有介紹。

          2、兩臺服務(wù)器之間可以相互ping通
          --在192.168.0.2上輸入ping命令
          ping 192.168.0.1
          --在192.168.0.1上輸入ping命令
          ping 192.168.0.2

          3、安裝成功一臺MySQL后,使用虛擬機(jī)克隆一臺作為從服務(wù)器



          配置主(Master)數(shù)據(jù)庫

          1、修改數(shù)據(jù)庫配置文件


          [root@localhost ~]# vi /etc/my.cnf


          將里面的內(nèi)容修改為


          [mysqld]
          #開啟二進(jìn)制日志
          log-bin=mysql-bin
          #標(biāo)識唯一id(必須),一般使用ip最后位
          server-id=1
          #不同步的數(shù)據(jù)庫,可設(shè)置多個
          binlog-ignore-db=information_schema
          binlog-ignore-db=performance_schema
          binlog-ignore-db=mysql
          #指定需要同步的數(shù)據(jù)庫(和slave是相互匹配的),可以設(shè)置多個
          binlog-do-db=test


          添加日志存儲方式和規(guī)則(選填)


          #設(shè)置存儲模式不設(shè)置默認(rèn)
          binlog_format=MIXED
          #日志清理時間
          expire_logs_days=7
          #日志大小
          max_binlog_size=100m
          #緩存大小
          binlog_cache_size=4m
          #最大緩存大小
          max_binlog_cache_size=521m


          :日志的存儲容量我設(shè)置的都比較小,當(dāng)然你可以根據(jù)實際情況修改得大一點。


          2、重啟數(shù)據(jù)庫服務(wù)mysqld


          service?mysqld restart


          如果你按照上面的正確安裝mysql了,這里是可以正常重啟的。如果啟動不正常出現(xiàn)如下報錯:
          The?server?quit?without?updating?PID?file......
          你需要使用如下命令查看是否還存在mysqld進(jìn)程


          ps?-ef|grep?mysqld


          如果有,可以使用命令:kill -9 mysqld的進(jìn)程號?結(jié)束它,然后重新啟動mysqld

          我就遇到過上述的情況。當(dāng)然也有其他原因,這里貼一個其他可能原因的解決辦法供參考:
          https://javawind.net/p141

          3、登陸MySQL數(shù)據(jù)庫允許從庫獲得主庫日志


          [root@localhost ~]# mysql -u root -p


          :第一次登陸是不需要輸入root的密碼的。

          進(jìn)入后做如下配置:


          #給從庫放權(quán)限
          mysql>GRANT FILE ON *.* TO 'root'@'192.168.0.2'?IDENTIFIED BY 'root password'; #創(chuàng)建用戶
          mysql>GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.0.2'?IDENTIFIED BY 'root password'; #修改用戶權(quán)限
          mysql>select host ,user ,password from mysql.user; #查看是否修改成功
          mysql>FLUSH PRIVILEGES; #刷新權(quán)限


          4、重啟MySQL服務(wù),登錄MySQL,查看主庫信息


          [root@localhost ~]# service mysqld restart #重啟mysql服務(wù)
          [root@localhost ~]# mysql -u root -p #登陸mysql
          mysql>?show master status; #查看master狀態(tài)


          顯示大概如下內(nèi)容


          +------------------+----------+--------------+----------------------------------+-------------------+
          | File |?Position | Binlog_Do_DB |?Binlog_Ignore_DB | Executed_Gtid_Set |
          +------------------+----------+--------------+----------------------------------+-------------------+
          | mysql-bin.000006 |????120?| ufind_db |?information_schema,performance_schema,mysql | |
          +------------------+----------+--------------+----------------------------------+-------------------+
          1?row in?set (0.00?sec)


          :如果執(zhí)行這個步驟始終為Empty set(0.00 sec),那說明前面的my.cnf沒配置對,請回去重新檢查配置步驟。



          配置從(Slave)數(shù)據(jù)庫

          1、修改從庫的數(shù)據(jù)庫配置文件


          [root@localhost ~]# vi /etc/my.cnf


          將里面的內(nèi)容修改為


          #開啟二進(jìn)制日志
          log-bin=mysql-bin
          server-id=2
          binlog-ignore-db=information_schema
          binlog-ignore-db=performance_schema
          binlog-ignore-db=mysql
          #與主庫配置保持一致
          replicate-do-db=test
          replicate-ignore-db=mysql
          log-slave-updates
          slave-skip-errors=all
          slave-net-timeout=60


          2、重啟MySQL服務(wù),登錄MySQL


          [root@localhost ~]# service mysqld restart

          [root@localhost ~]# mysql -u root -p


          并作如下修改:


          #關(guān)閉Slave
          mysql>?stop slave; #設(shè)置連接主庫信息
          mysql>?change master to master_host='192.168.0.1',master_user='root',master_password='root password',master_log_file='mysql-bin.000006', master_log_pos=120;
          #開啟Slave
          mysql>?start slave;


          :上面的master_log_file是在配置Master的時候的File字段, master_log_pos是在配置Master的Position 字段。一定要一一對應(yīng)

          3、查看從庫狀態(tài)信息


          mysql>?show slave status \G;


          成功的話會顯示如下信息:


          *************************** 1. row ***************************
          ???????????????Slave_IO_State: Waiting for master to send event
          ??????????????????Master_Host: 192.168.0.1
          ??????????????????Master_User: root
          ??????????????????Master_Port: 3306
          ????????????????Connect_Retry: 60
          ??????????????Master_Log_File: mysql-bin.000006
          ??????????Read_Master_Log_Pos: 120
          ???????????????Relay_Log_File: localhost-relay-bin.000006
          ????????????????Relay_Log_Pos: 520
          ????????Relay_Master_Log_File: mysql-bin.000006
          ?????????????Slave_IO_Running: Yes //顯示yes為成功
          ????????????Slave_SQL_Running: Yes //顯示yes為成功,如果為no,一般為沒有啟動master
          ??????????????Replicate_Do_DB: test
          ??????????Replicate_Ignore_DB: mysql//上面的都是配置文件中的信息
          ???????????Replicate_Do_Table:
          ???????Replicate_Ignore_Table:
          ??????Replicate_Wild_Do_Table:
          ??Replicate_Wild_Ignore_Table:
          ???????????????????Last_Errno: 0
          ???????????????????Last_Error:
          ?????????????????Skip_Counter: 0
          ??????????Exec_Master_Log_Pos: 357
          ??????????????Relay_Log_Space: 697
          ??????????????Until_Condition: None
          ???????????????Until_Log_File:
          ????????????????Until_Log_Pos: 0
          ???????????Master_SSL_Allowed: No
          ???????????Master_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: No
          ????????????????Last_IO_Errno: 0
          ????????????????Last_IO_Error: //如果為no,此處會顯示錯誤信息
          ???????????????Last_SQL_Errno: 0
          ???????????????Last_SQL_Error:
          ??Replicate_Ignore_Server_Ids:
          ?????????????Master_Server_Id: 2
          ??????????????????Master_UUID: be0a41c0-2b40-11e8-b791-000c29267b6a
          ?????????????Master_Info_File: /usr/local/mysql/data/master.info
          ????????????????????SQL_Delay: 0
          ??????????SQL_Remaining_Delay: NULL
          ??????Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update?it
          ???????????Master_Retry_Count: 86400
          ??????????????????Master_Bind:
          ??????Last_IO_Error_Timestamp:
          ?????Last_SQL_Error_Timestamp:
          ???????????????Master_SSL_Crl:
          ???????????Master_SSL_Crlpath:
          ???????????Retrieved_Gtid_Set:
          ????????????Executed_Gtid_Set:
          ????????????????Auto_Position: 0
          1?row?in?set?(0.00?sec)
          ?
          ERROR:
          No?query?specified


          :如果Slave_IO_Running: No并且出現(xiàn)下面的錯誤

          Last_IO_Error:?Fatal?error:?The?slave?I/O?thread?stops?because?master?and?slave?have?equal?MySQL?server?UUIDs;?these?UUIDs?must?be?different?for?replication?to?work.

          說明主服務(wù)器的UUID和從服務(wù)器的UUID重復(fù),因為我是安裝成功一臺數(shù)據(jù)庫后直接克隆的,所以他們的UUID是一樣的,就會報這個錯??梢孕薷囊幌聫膸斓腢UID即可。

          我們先在從庫的數(shù)據(jù)庫中生成一個UUID


          mysql>select UUID();


          將數(shù)據(jù)庫中查詢出來的這個UUID復(fù)制出來,然后編輯從庫的UUID配置文件

          如果你也安裝的跟我一樣,那么這個配置文件的路徑就應(yīng)該在這里:

          [root@localhost ~]# vi /usr/local/mysql/data/auto.cnf


          進(jìn)去后,將一串32位長的UUID,替換成我們剛在數(shù)據(jù)庫中查詢生成的UUID即可。


          如果Slave_IO_Running: No 并出現(xiàn)下面錯誤
          Got?fatal?error?1236?from?master?when?reading?data?from?binary?log:?'Could?not?find?first?log?file?name?in?binary?log?index?file'

          解決方法:復(fù)位


          mysql>stop slave; //停止
          mysql>reset slave; //復(fù)位
          mysql>start slave; //開啟



          至此整個過程就配置好了。


          可能有小伙伴會問,這些配置文件我都配好了,信息也和你的一樣,我還是不確定是否配置成功。


          那么你可以在主服務(wù)器上創(chuàng)建一個表,然后在從服務(wù)器上查詢剛創(chuàng)建的這個表,看是否存在就可以啦。



          Tips

          1、關(guān)于增刪改查,主從數(shù)據(jù)不一致問題:


          #select 語句,暫時沒有發(fā)現(xiàn)問題
          ?
          #
          insert 語句,暫時沒有發(fā)現(xiàn)問題
          ?
          #
          update 語句,暫時沒有發(fā)現(xiàn)問題
          ?
          #
          delete 語句,主庫刪除多條數(shù)據(jù),發(fā)現(xiàn)數(shù)據(jù)不一致


          原因:在主庫的logbin中的確有執(zhí)行刪除語句,但是在從庫的logbin中卻沒有刪除語句
          解決:使用 use database 選取當(dāng)前數(shù)據(jù)庫架構(gòu)中的需要操作的數(shù)據(jù)庫,然后在執(zhí)行刪除,OK同步成功

          2、查詢binlog主從日志的方法


          #查看binlog全部文件
          mysql>show binary logs;
          ?
          #
          查看binlog是否開啟NO為開啟
          mysql>?show variables like 'log_bin%';
          ?
          #
          詳細(xì)信息
          mysql>??show variables like 'binlog%';
          ?
          #
          查看binlog日志
          mysql>?show binlog events in'mysql-bin.000019';
          ?
          #
          或者使用mysqlbinlog,如果報錯使用--no-defaults(使用全路徑)
          [root@localhost ~]# /usr/local/mysql/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000019


          3、手動清理master日志,最好關(guān)閉日志,在/etc/my.cnf


          #手動刷新日志
          mysql>?show master status;
          #刪除全部
          mysql>?reset slave;或 rest master;
          #刪除MySQL-bin.004
          mysql>?PURGE MASTER LOGS TO 'MySQL-bin.004';



          此外,如果你在修改最大連接數(shù)時,可能會存在已經(jīng)將mysql配置文件的連接數(shù)改成1000或更大,但是查詢數(shù)據(jù)庫的最大連接數(shù)始終都是214,可以嘗試如下方法:

          https://www.cnblogs.com/brucetang/p/9733998.html


          參考
          • https://javawind.net/p141
          • https://www.cnblogs.com/brucetang/p/9733998.html



          我是岳哥,最后給大家分享我寫的SQL兩件套:《SQL基礎(chǔ)知識第二版》《SQL高級知識第二版》的PDF電子版。里面有各個語法的解釋、大量的實例講解和批注等等,非常通俗易懂,方便大家跟著一起來實操。


          有需要的讀者可以下載學(xué)習(xí),在下面的公眾號「數(shù)據(jù)前線」(非本號)后臺回復(fù)關(guān)鍵字:SQL,就行

          數(shù)據(jù)前線
          ——End——

          后臺回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨

          后臺回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。

          推薦閱讀

          瀏覽 30
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.操逼网 | 亚洲国产精品二二三三区 | 日本不卡在线播放 | 成人网站在线观看mv视频 | 色婷婷做视频网站 |