• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • mysql主從復制、半同步復制、并行復制、多組復制

    一、主從復制

    redhat6.5
    master:server1 172.25.35.52
    slave:server3 172.25.35.53

    master:

    [root@server2 ~]# ls
    mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
    mysql-community-client-5.7.17-1.el6.x86_64.rpm
    mysql-community-common-5.7.17-1.el6.x86_64.rpm
    mysql-community-libs-5.7.17-1.el6.x86_64.rpm
    mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm
    mysql-community-server-5.7.17-1.el6.x86_64.rpm
    [root@server2 ~]# tar xf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
    [root@server2 ~]# yum install mysql-community-client-5.7.17-1.el6.x86_64.rpm mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm mysql-community-common-5.7.17-1.el6.x86_64.rpm mysql-community-libs-5.7.17-1.el6.x86_64.rpm mysql-community-server-5.7.17-1.el6.x86_64.rpm -y
    [root@server2 ~]# grep "temporary password" /var/log/mysqld.log  //查找數據庫原始密碼
    2018-08-10T13:21:26.521345Z 1 [Note] A temporary password is generated for root@localhost: EUaF<YSGI2ih
    [root@server2 ~]# mysql_secure_installation
    
    Securing the MySQL server deployment.
    
    Enter password for user root:  //輸入 EUaF<YSGI2ih
    
    The existing password for the user account root has expired. Please set a new password.
    
    New password:  //輸入用戶密碼,密碼要是字母大小寫+特殊字符+數字
    
    Re-enter new password: 
    \The 'validate_password' plugin is installed on the server.
    The subsequent steps will run with the existing configuration
    of the plugin.
    Using existing password for root.
    
    Estimated strength of the password: 100 
    Change the password for root ? ((Press y|Y for Yes, any other key for No) : 
    
     ... skipping.
    By default, a MySQL installation has an anonymous user,
    allowing anyone to log into MySQL without having to have
    a user account created for them. This is intended only for
    testing, and to make the installation go a bit smoother.
    You should remove them before moving into a production
    environment.
    
    Remove anonymous users? (Press y|Y for Yes, any other key for No) : 
    
     ... skipping.
    
    Normally, root should only be allowed to connect from
    'localhost'. This ensures that someone cannot guess at
    the root password from the network.
    
    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : 
    
     ... skipping.
    By default, MySQL comes with a database named 'test' that
    anyone can access. This is also intended only for testing,
    and should be removed before moving into a production
    environment.
    
    Remove test database and access to it? (Press y|Y for Yes, any other key for No) : 
    
     ... skipping.
    Reloading the privilege tables will ensure that all changes
    made so far will take effect immediately.
    
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : 
    
     ... skipping.
    All done! 
    [root@server2 ~]# vim /etc/my.cnf  //末尾添加
    server-id=2  //服務器 id,主從需不同
    log-bin=mysql-bin  //日志
    [root@server2 ~]# /etc/init.d/mysqld restart
    Stopping mysqld:                                           [  OK  ]
    Starting mysqld:                                           [  OK  ]
    [root@server2 ~]# mysql -pZhanG@2424
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 4
    Server version: 5.7.17-log MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> grant replication slave on *.* to student@'172.25.69.%' identified by 'ZhanG@2424';
    Query OK, 0 rows affected, 1 warning (0.17 sec)
    
    mysql> show master status;

    這里寫圖片描述

    slave:

    初始化過程同server2:
    [root@server3 mysql]# vim /etc/my.cnf
    server-id=3
    [root@server3 mysql]# /etc/init.d/mysqld restart
    [root@server3 mysql]# mysql -pZhanG@2424
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 4
    Server version: 5.7.17 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> change master to  master_host='172.25.69.2',master_user='student',master_password='ZhanG@2424',master_log_file='mysql-bin.000001',master_log_pos=450;    //與 master 建立認證
    Query OK, 0 rows affected, 2 warnings (0.26 sec)
    
    mysql> start slave;
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> show slave status\G;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 172.25.69.2
                      Master_User: student
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 450
                   Relay_Log_File: server3-relay-bin.000002
                    Relay_Log_Pos: 320
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes  //必須為yes
                Slave_SQL_Running: Yes   //必須為yes
                //這里盡顯示部分status
    測試:
    master:添加數據庫
    mysql> create database haha;
    Query OK, 1 row affected (0.21 sec)
    
    mysql> use haha;
    Database changed
    mysql> create table info(
        -> username varchar(10) not null,
        -> password varchar(10) not null);
    Query OK, 0 rows affected (0.93 sec)
    
    mysql> insert into info values('user1','111');
    Query OK, 1 row affected (0.16 sec)
    
    mysql> insert into info values('user2','222');
    Query OK, 1 row affected (0.42 sec)
    
    mysql> select * from haha.info;

    這里寫圖片描述

    slave:查看到同步過來
    mysql> select * from haha.info;

    這里寫圖片描述

    二、Gtid主從復制

    master:
    [root@server2 ~]# vim /etc/my.cnf  //末尾添加如下內容
    gtid_mode=ON
    enforce-gtid-consistency=true
    [root@server2 ~]# /etc/init.d/mysqld restart
    
    
    slave:
    [root@server3 ~]# vim /etc/my.cnf   //末尾添加如下內容
    gtid_mode=ON
    enforce-gtid-consistency=true
    [root@server3 ~]# /etc/init.d/mysqld restart
    [root@server3 mysql]# mysql -pZhanG@2424
    mysql> stop slave;
    Query OK, 0 rows affected (0.11 sec)
    
    mysql> change master to master_host='172.25.69.2' , master_user='student' , master_password='ZhanG@2424' , MASTER_AUTO_POSITION=1;
    Query OK, 0 rows affected, 2 warnings (0.20 sec)
    
    mysql> start slave;
    Query OK, 0 rows affected (0.15 sec)
    
    mysql> show slave status\G;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 172.25.69.2
                      Master_User: student
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 154
                   Relay_Log_File: server3-relay-bin.000002
                    Relay_Log_Pos: 367
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    測試:
    master:給數據庫插入內容
    mysql> insert into info values('user3','333');
    Query OK, 1 row affected (0.22 sec)
    
    mysql> select * from haha.info;

    這里寫圖片描述

    slave:可以同步過來
    mysql> select * from haha.info;

    這里寫圖片描述

    三、半同步復制

    master:

    mysql>  install plugin rpl_semi_sync_master soname 'semisync_master.so';
    Query OK, 0 rows affected (0.37 sec)
    
    mysql> show global variables like '%semi%';   //查看參數

    這里寫圖片描述
    timeout 10s,超過該時間會轉為異步復制,不能保證數據完全同步

    mysql> set global rpl_semi_sync_master_enabled=1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show global status like '%semi%';

    這里寫圖片描述

    slave:

    mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> set global rpl_semi_sync_slave_enabled=1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show global variables like '%semi%';

    這里寫圖片描述

    mysql> stop slave io_thread; //重啟io線程
    Query OK, 0 rows affected (0.11 sec)
    
    mysql> start slave io_thread;
    Query OK, 0 rows affected (0.00 sec)
    測試:
    master:刪除數據庫內容看slave是否同步
    mysql> delete from info where username='user3';
    Query OK, 1 row affected (0.18 sec)
    
    mysql> select * from haha.info;

    這里寫圖片描述

    slave:數據庫已經刪除,表示同步過來了
    mysql> select * from haha.info;

    這里寫圖片描述

    master:可以看到參數有變化
    mysql> show global status like '%semi%';

    這里寫圖片描述

    延時測試:
    slave:
    mysql> stop slave io_thread;  //關掉io線程
    Query OK, 0 rows affected (0.11 sec)
    
    master:
    mysql> delete from info where username='user2'; //產生了10秒延時,變成異步傳輸
    Query OK, 1 row affected (10.22 sec)  //時間變化10秒左右
    
    slave:
    mysql> select * from haha.info;

    這里寫圖片描述

    slave:
    mysql> start slave io_thread;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from haha.info;

    這里寫圖片描述
    解決SQL、IO狀態為NO的步驟:
    Slave: mysql> stop slave;
    mysql> reset master;
    mysql> reset slave;
    mysql> start slave;
    解決數據不同步的步驟:
    (1)手動將master、slave的表和庫等復制導入,保證數據同步
    (2)Master:mysql> reset master; //重置
    Slave: mysql> stop slave;
    mysql> reset master;
    mysql> reset slave;
    mysql> start slave;
    mysql> show slave status\G;
    ***************** 1. row *****************
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes //必須是yes
    //如果都是 yes,表示從庫的 I/O,Slave_SQL 線程都正確開啟.表明數據庫正在同步

    四、數據庫優化

    server2為server3的master
    server3為server4的master

    server3:
    [root@server3 mysql]# vim /etc/my.cnf
    server-id=3
    log-bin=mysql-bin
    log-slave-updates
    gtid_mode=ON
    enforce-gtid-consistency=true
    [root@server3 mysql]# /etc/init.d/mysqld restart
    [root@server3 mysql]# mysql -pZhanG@2424
    mysql> grant replication slave on *.* to student@'172.25.69.%' identified by 'ZhanG@2424';
    Query OK, 0 rows affected, 1 warning (0.15 sec)
    
    mysql> show slave status\G;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 172.25.69.2
                      Master_User: student
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 952
                   Relay_Log_File: server3-relay-bin.000006
                    Relay_Log_Pos: 454
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    
    server4:
    安裝mysql、安全初始化同server2
    [root@server4 ~]# /etc/init.d/mysqld start
    [root@server4 ~]# vim /etc/my.cnf
    server-id=4
    gtid_mode=ON
    enforce-gtid-consistency=true
    [root@server4 ~]# /etc/init.d/mysqld restart
    [root@server4 ~]# mysql -pZhanG@2424
    mysql> change master to master_host='172.25.69.3', master_user='student', master_password='ZhanG@2424', master_auto_position=1;   //與server3建立連接
    Query OK, 0 rows affected, 2 warnings (0.42 sec)
    
    mysql> start slave;
    Query OK, 0 rows affected (0.46 sec)
    
    mysql> show slave status\G;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 172.25.69.3
                      Master_User: student
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 154
                   Relay_Log_File: server4-relay-bin.000003
                    Relay_Log_Pos: 367
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    mysql> show databases;

    這里寫圖片描述
    解決數據不同步:
    server3:
    [root@server3 ~]# mysqldump -p haha > haha.sql
    Enter password:
    Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don’t want to restore GTIDs, pass –set-gtid-purged=OFF. To make a complete dump, pass –all-databases –triggers –routines –events.
    [root@server3 ~]# scp haha.sql server4:.
    root@server4’s password:
    haha.sql 100% 2051 2.0KB/s 00:00
    Server4:
    [root@server4 ~]# vim haha.sql
    這里寫圖片描述
    [root@server4 ~]# mysql -p < haha.sql
    Enter password:
    [root@server4 ~]# mysql -pZhanG@2424
    mysql> show databases;
    這里寫圖片描述

    測試:
    server2:
    mysql> use haha;
    mysql> select * from haha.info;

    這里寫圖片描述

    mysql> insert into info values('user2','222');
    Query OK, 1 row affected (00.12 sec)
    
    mysql> select * from info;

    這里寫圖片描述

    Server3、server4都同步過來
    mysql> select * from haha.info;

    這里寫圖片描述
    注:bin log索引文件: /var/lib/mysql/mysql-bin.index
    查看二進制日志:mysqlbinlog -vv –base64-output=DECODE-ROWS mysql-bin.000006 //-vv詳細顯示,–base64查看加密的數據

    五、并行復制

    server3:

    mysql> show processlist;

    這里寫圖片描述

    [root@server3 ~]# vim /etc/my.cnf  //添加如下內容
    enforce-gtid-consistency=true
    slave-parallel-type=LOGICAL_CLOCK
    slave-parallel-workers=16
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    relay_log_recovery=ON
    [root@server3 ~]# /etc/init.d/mysqld restart
    [root@server3 ~]# mysql -pZhanG@2424
    mysql> show processlist;

    這里寫圖片描述
    這里寫圖片描述

    六、多組復制

    [root@server2 ~]# /etc/init.d/mysqld stop
    [root@server2 ~]# cd /var/lib/mysql
    [root@server2 mysql]# rm -fr *
    [root@server2 mysql]# vim /etc/my.cnf
    server_id=2
    gtid_mode=ON
    enforce_gtid_consistency=ON
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    binlog_checksum=NONE
    log_slave_updates=ON
    log_bin=binlog
    binlog_format=ROW
    
    transaction_write_set_extraction=XXHASH64
    loose-group_replication_group_name="cb59c76b-9cc1-11e8-9524-525400aebb10"
    loose-group_replication_start_on_boot=off
    loose-group_replication_local_address= "172.25.69.2:24901"
    loose-group_replication_group_seeds="172.25.69.2:24901,172.25.69.3:24901,172.25.69.4:24901"
    loose-group_replication_bootstrap_group=off
    loose-group_replication_single_primary_mode=off
    loose-group_replication_enforce_update_everywhere_checks=on
    loose-group_replication_ip_whitelist="172.25.69.0/24,127.0.0.1/8"

    在server3查看UUID:
    這里寫圖片描述

    [root@server2 mysql]# /etc/init.d/mysqld start
    [root@server2 mysql]# grep password /var/log/mysqld.log
    2018-08-10T17:26:34.931718Z 1 [Note] A temporary password is generated for root@localhost: Gs8tZdr1=KLU
    [root@server2 mysql]# mysql -p
    Enter password:   //輸入Gs8tZdr1=KLU
    mysql> show databases;  //查看數據庫時會報錯,是因為沒有給超級用戶授權
    ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
    mysql> alter user root@localhost identified by 'ZhanG@2424';
    Query OK, 0 rows affected (0.18 sec)
    
    mysql> show databases;

    這里寫圖片描述

    mysql> SET SQL_LOG_BIN=0;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> GRANT REPLICATION SLAVE ON *.* TO student@'%' IDENTIFIED BY 'ZhanG@2424';
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> reset master;
    Query OK, 0 rows affected (0.84 sec)
    
    mysql> SET SQL_LOG_BIN=1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> CHANGE MASTER TO MASTER_USER='student', MASTER_PASSWORD='ZhanG@2424' FOR CHANNEL 'group_replication_recovery';
    Query OK, 0 rows affected, 2 warnings (1.16 sec)
    
    mysql>  INSTALL PLUGIN group_replication SONAME 'group_replication.so';
    Query OK, 0 rows affected (0.30 sec)
    
    mysql> SET GLOBAL group_replication_bootstrap_group=ON;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> START GROUP_REPLICATION;
    Query OK, 0 rows affected (2.56 sec)
    
    mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from performance_schema.replication_group_members;

    這里寫圖片描述

    Server3、server4步驟和server2步驟基本相同,差別如下:

    1、文件/etc/my.cnf中server_id不同loose-group_replication_local_address后面跟的參數是本機ip
    2、在進入數據庫后,加載完插件后,(不執行直接執行SET GLOBAL group_replication_bootstrap_group=ON;)START GROUP_REPLICATION;查看成員信息,全部都是ONLINE的即可

    server3:

    mysql> select * from performance_schema.replication_group_members;

    這里寫圖片描述

    server4:

    mysql> select * from performance_schema.replication_group_members;

    這里寫圖片描述

    測試:

    server2:創建數據庫
    mysql> show databases;

    這里寫圖片描述

    mysql> create database xixi;
    Query OK, 1 row affected (0.95 sec)
    
    mysql> show databases;

    這里寫圖片描述

    Server3、server4:同步到數據庫
    mysql> show databases;

    這里寫圖片描述

    版權聲明:本文為Ying_smile原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/Ying_smile/article/details/81739152

    智能推薦

    mysql半同步復制與并行復制

    ####################################相關概念################################################### (1)異步復制:主庫上的事務不會等待從庫的確認即返回客戶端提交成功! (2)同步復制:主庫上提交的事務向客戶端返回成功之前,需要收到所有從庫提交事務的確認信息。 (3)半同步復制:異步復制和同步復制的折中,主庫上提交...

    MySQL5.7安裝+基于GTID主從復制+并行復制+增強半同步復制+讀寫分離+M-S-S架構(聯級復制)

    實驗環境: Centos7.2 角色 主機IP server_id 數據狀態 Proxysql 192.168.148.62 null 無 Master 192.168.148.62 1 剛安裝的全新MySQL實例 Slave1 192.168.148.61 2 剛安裝的全新MySQL實例 Slave2 192.168.148.64 3 剛安裝的全新MySQL實例   一、安裝最新版本M...

    mysql 主從復制優化、并行復制

    實驗環境: server2 為 server3 的 master server3 為 server1 的 master 即server1、2、3的身份如下: server2:master server3:master / slave server2:slave 由于先前做過其他數據庫實驗,環境是server2為master, server1和server3為slave 實驗操作: server1、...

    mysql的主從復制,基于gtid的主從復制,半同步復制,組復制

    主從復制原理: 1.傳統的實現數據庫同步 # [root@server1 mysql5.7]# grep password /var/log/mysqld.log #獲取初始密碼 2018-08-07T14:06:55.029406Z 1 [Note] A temporary password is generated for root@localhost: aG!a*sUs>3#) #初始...

    linux mysql的主從復制(GTID)/并行復制/無損復制

    安裝mysql 本次使用五個rpm包安裝   安裝后修改密碼即可 密碼默認在log中   初始化修改即可   開啟mysql二進制日志 可以設定徐亞同步的數據庫或不需要的數據庫 進入mysql創建備份賬戶 查看日至位置以及pos在備份機使用 grant replication slave on  *.* to  'bobo'@'172.25.15....

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡