溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL主從復(fù)制認識

發(fā)布時間:2020-02-25 12:48:05 來源:網(wǎng)絡(luò) 閱讀:325 作者:Blue后花園 欄目:系統(tǒng)運維
  • MySQL主從復(fù)制作用
    1)、什么是MySQL主從復(fù)制
    MySQL主從復(fù)制是指數(shù)據(jù)可以從一個MySQL數(shù)據(jù)庫服務(wù)器主節(jié)點復(fù)制到一個或多個MySQL數(shù)據(jù)庫從節(jié)點。MySQL默認采用異步復(fù)制方式,這樣從節(jié)點不用一直訪問主服務(wù)器來更新自己的數(shù)據(jù),數(shù)據(jù)的更新可以在遠程連接上進行,從節(jié)點可以復(fù)制主數(shù)據(jù)庫中的所有數(shù)據(jù)庫或者特定的數(shù)據(jù)庫。
    2)、MySQL主從復(fù)制作用
    一、數(shù)據(jù)熱備
    作為備數(shù)據(jù)庫,當主數(shù)據(jù)庫服務(wù)器發(fā)生故障后,可切換到從數(shù)據(jù)庫繼續(xù)工作,避免數(shù)據(jù)丟失。
    二、讀寫分離
    可支持MySQL數(shù)據(jù)庫服務(wù)器支持更大的并發(fā)。數(shù)據(jù)讀寫操作可分配在不同的服務(wù)器間進行。如操作報表中尤其重要,由于部分報表SQL語句非常的慢,會導(dǎo)致鎖表,影響前臺服務(wù)。使用主從復(fù)制,前臺使用master,負責(zé)寫,報表使用slave,負責(zé)讀,那么報表SQL將不會造成前臺鎖表,保證了前臺正常運行。
    三、架構(gòu)擴展
    隨著業(yè)務(wù)量越來越大,I/O訪問頻率過高,單機可能無法滿足。此時做多庫的存儲,如一主多從方式,以降低磁盤I/O訪問,提高單個機器的I/O性能。
  • MySQL主從復(fù)制原理
    MySQL數(shù)據(jù)復(fù)制的基礎(chǔ)是二進制日志文件(binary log file)。一臺MySQL數(shù)據(jù)庫一旦啟用二進制日志后,其作為master節(jié)點,數(shù)據(jù)庫中所有操作都會以“事件”的方式記錄在二進制日志中,其他數(shù)據(jù)庫作為slave通過一個I/O線程與主服務(wù)器保持通信,并監(jiān)控master的二進制日志文件的變化,如發(fā)現(xiàn)master二進制日志文件發(fā)生變化,則會把變化復(fù)制到自己的中繼日志中,然后slave的一個SQL線程會把相關(guān)的“事件”執(zhí)行到自己的數(shù)據(jù)庫中,以此實現(xiàn)從數(shù)據(jù)庫和主數(shù)據(jù)庫的一致性,也就實現(xiàn)了主從復(fù)制。
    MySQL主從復(fù)制認識
    總結(jié)如下:
    1)、master將操作語句記錄到binlog日志中,然后授予slave遠程連接的權(quán)限(master上創(chuàng)建授權(quán)的用戶,開啟binlog二進制日志功能;通常為了數(shù)據(jù)安全考慮,slave也開啟binlog功能)。
    2)、slave開啟兩個線程:IO線程和SQL線程。IO線程負責(zé)讀取master的binlog內(nèi)容到中繼日志relay log里;SQL線程負責(zé)從relay log日志里讀出binlog內(nèi)容,并更新到slave的數(shù)據(jù)庫里,這樣就能保證slave數(shù)據(jù)和master數(shù)據(jù)保持一致了。
    3)、Mysql主從復(fù)制至少需要兩個Mysql服務(wù),當然Mysql服務(wù)可以分布在不同的服務(wù)器上,也可以在一臺服務(wù)器上啟動多個MySQL服務(wù)。
    4)、Mysql主從復(fù)制最好確保master和slave服務(wù)器上的Mysql版本相同。
  • MySQL主從形式
    常見的主從形式:
    一主一從
    MySQL主從復(fù)制認識
    一主兩從、一主多從
    MySQL主從復(fù)制認識
    聯(lián)級復(fù)制
    MySQL主從復(fù)制認識
  • MySQL主從復(fù)制操作
    OS:CentOS7
    主從形式:一主一從
    實現(xiàn)MySQL主從復(fù)制需要進行的配置:
    主服務(wù)器
    開啟二進制日志
    配置唯一的server-id
    獲得master二進制日志文件名及位置
    創(chuàng)建一個用于slave和master通信的用戶賬號
    從服務(wù)器
    配置唯一的server-id
    使用master分配的用戶賬號讀取master二進制日志
    啟用slave服務(wù)
    具體操作:
    主服務(wù)器操作
    1)、修改主數(shù)據(jù)庫服務(wù)器配置文件my.cnf
    server_id = 1                #唯一標識,主庫從庫不能重復(fù)
    log_bin = mysql-bin          #開啟日志
    binlog_format=MIXED         #日志記錄的格式
    max_binlog_size = 512M     #單個日志文件最大
    expire_logs_day = 3          #日志有效期(天)
    binlog_do_db = test1,test2     #日志記錄那些數(shù)據(jù)庫
    binlog_ignore_db = mysql,performance_schema,information_schema   #日志記錄忽略那些數(shù)據(jù)庫

    2)、創(chuàng)建用于同步賬戶

    mysql> CREATE USER 'user'@'10.10.10.11' IDENTIFIED BY 'passwd';    #創(chuàng)建用戶
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'user'@'10.10.10.11';    #分配權(quán)限,只能10.10.10.11從服務(wù)器連接
    mysql>flush privileges;

    3)、查看master狀態(tài)
    show master status命令記錄二進制文件名(mysql-bin.000003)和position位置(77)。

    mysql > SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000003 | 77       | test         | manual,mysql     |
    +------------------+----------+--------------+------------------+

    從服務(wù)器操作
    1)、修改從數(shù)據(jù)庫服務(wù)器配置文件my.cnf

    server_id = 2
    log_bin = mysql-bin     #開啟日志
    binlog_format=MIXED     #日志記錄的格式
    max_binlog_size = 512M     #單個日志文件最大
    expire_logs_day = 3   #日志有效期(天)
    replicate_do_db = test1,test2     #slave上配置,指定slave要復(fù)制哪個庫
    replicate-ignore-db=mysql,performance_schema,information_schema     #slave上配置,指定slave要忽略哪些庫
    relay_log_recovery = 1     #從庫建議開啟,有利于數(shù)據(jù)一致性
    log_slave_updates = 1      #如果從庫還會用做主庫,建議開啟

    2)、設(shè)置同步信息
    先停止同步

    mysql>stop slave;

    設(shè)置同步信息

    mysql> CHANGE MASTER TO
    ->     MASTER_HOST='10.10.10.10',
    ->     MASTER_USER='user',
    ->     MASTER_PASSWORD='passwd',
    ->     MASTER_LOG_FILE='mysql-bin.000003',
    ->     MASTER_LOG_POS=77;

    其中master_log_file 和 master_log_pos為上面主庫show master status命令記錄的信息。
    3)、啟動slave 同步進程

    mysql>start slave;

    4)、slave狀態(tài)查看
    show slave status\G 命令查看,主要查看這幾項:

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    Master_Log_File: mysql-bin.000003
    Relay_Master_Log_File: mysql-bin.000003
    Read_Master_Log_Pos: 2720
    Exec_master_log_pos: 2720

    Slave_IO_Running和Slave_SQL_Running都為YES,表示主從同步設(shè)置成功了。
    驗證操作,如在master數(shù)據(jù)庫的test數(shù)據(jù)庫的一張表中插入一條數(shù)據(jù),在slave的test庫的相同數(shù)據(jù)表中查看是否有新增的數(shù)據(jù),即可驗證主從復(fù)制功能是否有效,還可以關(guān)閉slave(mysql>stop slave;),然后再修改master,看slave是否也相應(yīng)修改(停止slave后,master的修改不會同步到slave),就可完成MySQL主從復(fù)制功能的驗證了。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI