mysql經典主從複製

Mysql主從複製

 

  • 1 mysql主從複製原理

mysql複製是mysql自身內建的功能。複製的過程中一臺服務器充當主服務器,而一個或多個其他服務器充當從服務器。主服務器將更新寫入二進制日誌文件,並通過維護文件的一個索引來跟蹤日誌循環。主服務器中mysql主要提供認證服務,同時會啓動一個sqldump線程,這個線程會接受從服務器用戶的請求,並確保這個用戶具有權限之後,會去讀取二進制日誌中的事件,如從服務器是第一次來請求,那麼這個進程就讀取日誌中的第一個事件,讀一個就發送給從服務器一個,從服務器的進程在接收到主服務器發行過來的數據之後,會保存在本地的中繼日誌,然後再啓動一個具有特殊功能的線程,去中繼日誌中讀取事件,讀一行,在本地執行一下,以此類推,最終生成本地的數據庫。

注意:複製時,所有對複製中的表的更新必須在主服務器中進行。從服務器只能被動的接受數據,本身並不會接受客戶端鏈接進來做任何寫操作,從服務器中的數據都是來自主服務器。

 

  • 2 主從複製實現步驟

  • 2.1 實驗環境

[root@mysql ~]# cat /etc/redhat-release

CentOS release 6.6 (Final)

  • 2.2 必備軟件安裝

[root@mysql tools]# ls

cmake-2.8.7.tar.gz  mysql-5.5.32.tar.gz

在安裝cmake和mysql之前需要安裝一些其他必備的包

[root@mysql ~]# yum install make gcc vim ncurses-devel libaio-devel qt* –y

     

  • 2.2.1 源碼安裝cmake

[root@mysqltools]# tar zxvf cmake-2.8.7.tar.gz

[root@mysqltools]# cd cmake-2.8.7

[[email protected]]# ./configure

[[email protected]]# gmake && gmake install

  • 2.2.2 源碼安裝mysql

解壓

[root@mysql tools]# tar zxvfmysql-5.5.32.tar.gz

創建mysql用戶和組

[root@mysql tools]# groupadd mysql

[root@mysql tools]# useradd –gmysql –s /sbin/nologin –M mysql

[root@mysql tools]# cd mysql-5.5.32

創建安裝目錄

[[email protected]]# mkdir /application –p

開始檢查編譯環境編譯

[[email protected]]# cmake-DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 -DMYSQL_DATADIR=/application/mysql-5.5.32/data-DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock -DEXTRA_CHARSETS=gbk.gb2312.utf8.ascii -DENABLED_LOCAL_INFILE=ON -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITHOUT_PARTITION_STORAGE_ENGINE=1 -DWITH_FAST_MUTEXES=1 -DWITH_ZLIB=bundled -DENABLED_LOCAL_INFILE=1 -DWITH_READLINE=1 -DWITH_EMBEDDED_SERVER=1 -DWITH_DEBUG=0

編譯安裝

      [root@mysql mysql-5.5.32]# make&& make install

[[email protected]]# cp /server/tools/mysql-5.5.32/support-files/my-small.cnf/etc/my.cnf

[[email protected]]# ln -s /application/mysql-5.5.32/ /application/mysql

配置環境變量

[[email protected]]# echo 'PATH=/application/mysql/bin:$PATH' >>/etc/profile

[[email protected]]# source /etc/profile

授權data目錄

[[email protected]]# chown -R mysql.mysql /application/mysql/data/

創建多實例配置目錄

[[email protected]]# mkdir -p /data/{3306,3307}/data

[[email protected]]# cp /server/tools/mysql-5.5.32/support-files/my-small.cnf /data/3306/my.cnf

[root@mysql3306]# cp my.cnf /data/3307/

[root@mysql3307]# sed -i 's#3306#3307#g' my.cnf

[root@mysql3307]# vim my.cnf

        將server-id改成3


[root@mysql3307]# chown -R mysql.mysql /data/

[root@mysql3306]# cd /application/mysql/scripts/

初始化數據庫

     [root@mysql scripts]# ./mysql_install_db--basedir=/application/mysql --datadir=/data/3306/data --user=mysql

    [root@mysql scripts]#./mysql_install_db --basedir=/application/mysql --datadir=/data/3307/data--user=mysql

    

啓動mysql多實例

[root@mysqlscripts]# mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 >/dev/null &

   [root@mysql scripts]# mysqld_safe--defaults-file=/data/3307/my.cnf 2>&1 > /dev/null &

     查看多實例是否生效

[root@mysqlscripts]# ss -ntulp|grep 330

多實例進入mysql

[root@mysql~]# mysqladmin password oldboy123 -S /data/3306/mysql.sock

   [root@mysql ~]# mysqladmin passwordoldboy456 -S /data/3307/mysql.sock

 

[root@mysql~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock

  • 2.3 複製過程

  • 2.3.1 主服務器開啓bin log

[root@mysql mysql]# vim/data/3306/my.cnf

要有這一行:log-bin = /data/3306/mysql.bin

  • 2.3.2主服務器設置server-id

[root@mysql mysql]# vim/data/3306/my.cnf

server-id = 1

  • 2.3.3 從服務器設置server-id(與主服務器不一樣)

[root@mysql mysql]# vim/data/3307/my.cnf

server-id = 3

從庫不需要開啓bin log

  • 2.3.4 主服務器創建授權用戶

[root@mysql ~]# mysql -uroot-poldboy123 -S /data/3306/mysql.sock

mysql> grant replication slaveon *.* to mike@'192.168.200.140' identified by 'abc123abc'; 

mysql> flush privileges;

   

  • 2.3.5 主服務器開始鎖表進行數據備份

mysql> flush table with readlock;

[root@mysql ~]# mysqldump -uroot-poldboy123 --events -S /data/3306/mysql.sock -A -B|gzip>/tmp/slave_backup.sql

[root@mysql ~]# ls -l /tmp/

mysql> show master status;

  • 2.3.6 從服務器將主服務器的數據庫導入本地

[root@mysql ~]# mysql -uroot-poldboy123 -S /data/3307/mysql.sock </tmp/slave_backup.sql

  • 2.3.7 主庫解除鎖表

mysql>unlock tables;


  • 2.3.8 從服務器配置change master連接主庫

mysql> change master to master_host='192.168.200.140',master_user='mike',master_password='abc123ABC',master_log_file='mysql.000002',master_log_pos=651;

  • 2.3.9 從服務器開始與主庫同步

mysql>start slave;

  • 3 實驗測試

主庫:

wKioL1fPqYfwU30TAADDT5PabhQ274.png-wh_50

從庫:


wKiom1fPqaWy-APoAAC5PInbRXM720.png-wh_50

wKioL1fPqcjydIgaAAHGQxAUlnI220.png-wh_50

wKiom1fPqdqScA_0AAFoCLMk8uc979.png-wh_50


同步測試:

主庫:

wKiom1fPqe-DfMIHAACMyz6yRTM998.png-wh_50

從庫:


wKioL1fPqf3jnDhRAACLB4RTf7Y458.png-wh_50


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章