mysql數據庫主從及主主復制配置演示


實驗系統:CentOS 6.6_x86_64

實驗前提:提前准備好編譯環境,防火牆和selinux都關閉

實驗說明:本實驗共有2台主機,IP分配如拓撲

實驗軟件:mariadb-10.0.20

實驗拓撲:

    

一、安裝mysql

  1.編譯安裝mariadb:

tar xf mariadb-10.0.20-linux-x86_64.tar.gz  -C /usr/local/
cd /usr/local/
ln -sv mariadb-10.0.20-linux-x86_64 mysql
mkdir -pv /mydata/data
useradd -r mysql
chown -R mysql.mysql /mydata/data/
cd mysql/
chown -R root.mysql .
scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
cp support-files/my-large.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on

  2.編輯配置文件:

vim /etc/my.cnf
--------------------------------
datadir = /mydata/data             //增加此行
--------------------------------
service mysqld start
/usr/local/mysql/bin/mysql        //連接測試

    

二、主從復制

  實驗中我先讓19.43當主服務器,19.48為從服務器。

  1.主服務器操作:

    (1)編輯my.cnf,啟用二進制日志(如果定義到其他路徑,請給予其mysql權限):

log-bin=/mydata/data/mysql-bin

    (2)定義server-id:

server-id       = 1

    (3)創建有復制權限的賬號:

/usr/local/mysql/bin/mysql
-----------------------------------------
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO slave@192.168.19.48 IDENTIFIED BY '123456';      //遵循最小權限原則
FLUSH PRIVILEGES;

    (4)記錄最后的二進制日志信息,CHANGE MASTER時會用到:

SHOW MASTER LOGS;

    

  2.從服務器操作:

    (1)啟動中繼日志(如果定義到其他路徑,請給予其mysql權限):

relay_log=/mydata/data/relay-log

    (2)從服務器用中繼日志就足夠了,關閉二進制日志,減少磁盤IO:

#log-bin=mysql-bin             //將其注釋
#binlog_format=mixed

    (3)定義server-id:

server-id       = 2            //不能與主服務器相同

    (4)配置CHANGE MASTER:

/usr/local/mysql/bin/mysql
-----------------------------------------
CHANGE MASTER TO MASTER_HOST='192.168.19.43',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=326;
SHOW SLAVE STATUS\G //查看狀態
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.19.43
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 326
               Relay_Log_File: relay-log.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: No
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           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: 326
              Relay_Log_Space: 248
              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: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 0
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
                   Using_Gtid: No
                  Gtid_IO_Pos: 
1 row in set (0.00 sec)

    (5)啟動io thread以及sql thread:

START SLAVE;

    

  3.在主服務器創建數據庫,從服務器查看:

CREATE DATABASE jason;     //主服務器創建數據庫
SHOW DATABASES; //從服務器查看

    

  4.如果主數據庫不是新建立的,而是使用過一段時間,且里面已經有不少數據的情況下,需要先把主服務器數據導出,再導入到從服務器,然后根據上面的步驟進行主從復制,這里將不再演示。

  導出數據庫命令參考:mysqldump --all-databases --lock-all-tables --master-data=2 > name.sql

三、半同步復制

  1.什么是半同步復制?

    因為開啟這個功能之后,主服務器只等待多個從服務器中的指定的一台從服務器復制成功,然后才進行其他寫操作,使這個從服務器和主服務器上的數據完全同步,而並不管其他的從服務器。這在一定程度上就保證了我們數據的安全性。這個功能需要打由google貢獻的補丁,它是以插件的形式存在的。補丁存放的位置在:/usr/local/mysql/lib/plugin/

  2.主服務器打補丁:

/usr/local/mysql/bin/mysql
---------------------------------------------
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SHOW GLOBAL VARIABLES LIKE '%semi%';        //查看狀態

    

  3.主服務器修改配置:

SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=1000;

  4.從服務器打補丁:

/usr/local/mysql/bin/mysql
---------------------------------------------
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SHOW GLOBAL VARIABLES LIKE '%semi%';

    

  5.從服務器修改配置:

SET GLOBAL rpl_semi_sync_slave_enabled=1;
STOP SLAVE;
START SLAVE;

  6.主服務器查看狀態:

SHOW GLOBAL STATUS LIKE '%semi%';

    

四、主主復制

  1.由於剛才做了許多操作,為了不影響之后的實驗,我們先將數據庫進行重置:

service mysqld stop
rm -rf /mydata/data/*                                                                     //刪除數據庫文件
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/mydata/data/        //初始化mysql

  2.修改my.cnf:

    19.43上:

vim /etc/my.cnf
-------------------------------------------
[mysqld]
server-id=1
log-bin=/mydata/data/mysql1-bin               //開啟二進制日志
relay_log=/mydata/data/relay-log              //開始中繼日志
auto-increment-increment = 2                  //每次增長的數值
auto-increment-offset = 1                     //開始的數值

    19.48上:

vim /etc/my.cnf
-------------------------------------------
[mysqld]
server-id=2
log-bin=/mydata/data/mysql2-bin
relay_log=/mydata/data/relay-log
auto-increment-increment = 2
auto-increment-offset = 2

  3.創建具有復制權限的用戶:

    19.43上:

service mysqld start
/usr/local/mysql/bin/mysql
------------------------------------------
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO mmm@192.168.19.48 IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

    19.48上:

service mysqld start
/usr/local/mysql/bin/mysql
------------------------------------------
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO mmm@192.168.19.43 IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

  4.查看二進制位置:

    19.43上:

SHOW MASTER LOGS;

    

    19.48上使用同樣的命令:

    

  5.配置CHANGE MASTER:

    19.43上:

CHANGE MASTER TO MASTER_HOST='192.168.19.48',MASTER_USER='mmm',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql2-bin.000001',MASTER_LOG_POS=642;
START SLAVE;

    19.48上:

CHANGE MASTER TO MASTER_HOST='192.168.19.43',MASTER_USER='mmm',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql1-bin.000001',MASTER_LOG_POS=642;
START SLAVE;

  6.查看狀態:

SHOW SLAVE STATUS\G

     

    

  之后的復制演示這里不再演示,請大家自行嘗試。至此,所有試驗演示完畢,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM