MySQL多線程同步-Transfer使用測試


由淘寶核心系統研發—數據庫組開發的MySQL-Transfer,用於解決MySQL主從同步延遲的問題,從MySQL單線程到多線程的工作模式。可以觀看@丁奇的相關資料:


        MySQL多線程同步-Transfer使用說明
        MySQL異步復制延遲解決的架構設計與運維架構—在線播放—優酷網

 

系統結構 :

 

        傳統的主從結構是 [Master] à [Slave], Master和slave主從關系; 

        使用transfer以后,[Master] à [Transfer] .--> [Slave], Master和Transfer主從關系,Transfer和Slave是Client-Server關系。 

 

服務器環境:

        主庫:192.168.15.216   (3306端口) 

        從庫:192.168.15.217   (3306端口)

        Transfer: 192.168.15.217  (3307端口)    

        MySQL版本:mysql-5.5.18-linux2.6-x86_64.tar.gz 

        存儲引擎:Innodb

        Database: rocdata  

        MySQL-Transfer:Transfer.2.1-based-PS-5.5.18

注:

        Tranfsfer相同的表使用同一個線程更新,若只有一個表,性能與原生版本相同。要體現效果,一般16個表或以上,考慮到線上大庫都有分表,這個條件比較容易滿足。

 

一、192.168.15.216主庫配置

        首先確認主庫上使用row格式的binlog,配置/etc/my.cnf:

[client]

port            = 3306

socket          = /tmp/mysql.sock

[mysqld1]

port            = 3306

socket          = /tmp/mysql.sock

basedir=/usr/local/mysql

datadir=/mysqldata/

bind-address=192.168.15.216

skip-external-locking

skip-name-resolve

user=mysql

 

max_allowed_packet = 256M

query_cache_size=256M

max_connections=2000

max_connect_errors=10000

key_buffer_size=6000M

read_buffer_size=32M

read_rnd_buffer_size = 32M

myisam_sort_buffer_size=512M

tmp_table_size=1024M

old-passwords

 

interactive_timeout=60

wait_timeout=60

connect_timeout=60

table_cache=8192

thread_cache_size=512

sort_buffer_size=128M

back_log = 500

thread_concurrency=48

expire_logs_days=10

 

log-bin=mysql-bin

#binlog_format=STATEMENT

binlog_format=ROW

#binlog_format="MIXED

 

# master

server-id = 1

binlog-do-db = rocdata

binlog-ignore-db = mysql

 

        啟動MySQL,並查看Pos狀態。

        

 

 

二、192.168.15.217從庫配置。

        MySQL端口3306和3307 ,建議MySQL TDIR目錄區分開來。我的MySQL和Transfer目錄:

        /usr/local/mysql/

        /usr/local/mysql-transfer

        Transfer.2.1-based-PS-5.5.18替換T安裝目錄/usr/local/mysql-transfer/bin/下的mysqld。

        1、配置3306端口,同步Master數據,這里不需要寫主從同步信息,和單台MySQL配置一樣。

        /usr/local/mysql目錄部署一個MySQL版本5.5.18(真實庫),配置/etc/my.cnf:

[mysqld]

port            = 3306

socket          = /tmp/mysql.sock

basedir=/usr/local/mysql

datadir=/mysqldata/data3306

bind-address=192.168.15.217

skip-external-locking

skip-name-resolve

user=mysql               

 

max_allowed_packet = 256M

query_cache_size=256M

max_connections=2000

max_connect_errors=10000

key_buffer_size=6000M

read_buffer_size=32M

read_rnd_buffer_size = 32M

myisam_sort_buffer_size=512M

tmp_table_size=1024M

old-passwords

 

interactive_timeout=60

wait_timeout=60

connect_timeout=60

table_cache=8192

thread_cache_size=512

sort_buffer_size=128M

back_log = 500

thread_concurrency=48

expire_logs_days=10

        啟動MySQL 3306端口,並導入數據,前提需要記錄的Pos點,保證Transfer同步正常。和傳統的主從拷貝數據一樣。

        此時3306端口的運行狀態。

        

 

        2、配置3307 Transfer服務

        a) /usr/local/mysql-transfer/目錄部署一個MySQL (T),版本5.5.18

        b) 用附件中的mysqld替換T安裝目錄/usr/local/mysql-transfer/bin/下的mysqld 

        c) 在/usr/local/mysql-transfer/log 目錄下執行下執行 for((i=0; i<=16; i++)); do mkdir $i;done 

        d) 配置/etc/my3307.cnf,做以下修改:

[mysqld]

port            = 3307

socket          = /tmp/mysql3307.sock

basedir=/usr/local/mysql

datadir=/mysqldata/data3307

bind-address=192.168.15.217

skip-external-locking

skip-name-resolve

user=mysql

 

max_allowed_packet = 1G

query_cache_size=256M

max_connections=2000

max_connect_errors=10000

key_buffer_size=6000M

read_buffer_size=32M

read_rnd_buffer_size = 32M

myisam_sort_buffer_size=512M

tmp_table_size=1024M

old-passwords

 

interactive_timeout=60

wait_timeout=60

connect_timeout=60

table_cache=8192

thread_cache_size=512

sort_buffer_size=128M

back_log = 500

thread_concurrency=48

expire_logs_days=10

 

#tranfer

transfer_slave_thread = 16

remote_slave_hostname = 192.168.15.217

remote_slave_username = transfer

remote_slave_password = transferpw

remote_slave_port = 3306

 

relay-log =/usr/local/mysql/log/mysqld-relay-bin 

relay-log-index =/usr/local/mysql/log/mysqld-relay-bin.index 

master-info-file =/usr/local/mysql/log/master.info 

relay-log-info-file =/usr/local/mysql/log/relay-log.info 

log_slave_updates = 0 

slave_skip_errors=1062,1032

 

#slave 192.168.15.217

server-id = 3

replicate_do_db = rocdata

replicate-ignore-db = mysql

replicate-ignore-db = test

replicate-ignore-db = information_schema


        [說明]配置給Transfer的這個uname必須有Slave的super權限 
        e) Transfer需要導入同步的數據庫結構,不需要數據 

        f) Slave的 max_allowed_packet設置為1G (建議) 

        g) 啟動Transfer並設置為Master的從庫 


        具體步驟:

 

        在3306端口上賦予Transfer 有Slave的super權限:

        mysql> grant all privileges on  *.*  to  'transfer'@'192.168.15.217' identified by 'transferpw';

 

        在主庫192.168.15.216賦予Transfer 有 replicate  privileges權限:

 

        mysql> grant replication slave, reload, super on *.* to 'repluser216'@'192.168.15.217' identified by 'replpasswd216';    

 

        啟動Transfer並設置為Master的從庫:

        mysql> CHANGE MASTER to MASTER_HOST='192.168.15.216', MASTER_PORT=3306, MASTER_USER='repluser216', MASTER_PASSWORD='replpasswd216', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=82104;

        

        

 

 

三、測試

        1、在192.168.15.216主庫rocdate上創建表test,並寫入數據:

mysql> create table test  (  id int(4));

mysql> insert into test values(1);   

mysql> insert into test values(2);

          

        2、查看192.18.15.216 MySQL(T)和MySQL真實庫狀態:    
        



        說明:關於 MySQL-Transfer  的性能還未做測試,后期有時間會補上……有錯誤的地方,希望CU的大俠可以指正,謝謝

http://blog.chinaunix.net/uid-25266990-id-3515141.html

 

MySQL目前在互聯網領域應用非常廣闊一個數據庫系統. MySQL主從數據庫是常用的使用方法之一. 本文將通過基於vmware的Centos虛擬機來實驗安裝MySQL的主從方式部署.

一.Vmware 及linux環境安裝

1. Vmware軟件安裝

Vmware是流行的虛擬機軟件, vmare軟件下載安裝方法請到搜索引擎去搜索,有各種文章可以參考.

2. Linux系統安裝

用戶安裝完成vmware系統后可以自行安裝linux系統

我們這里給一個最方便的方式, 下載已經安裝好的linux for vmware虛擬機軟件.

網址如下: http://www.thoughtpolice.co.uk/vmware/  里面有很多已經安裝好的linux的vmware系統.

本文是以下面的版本進行測試安裝的.

64-bit: centos-5.6-x86_64-server.zip, 456M 
fast torrent download!web download 
md5sum: 2590006571f52ca00674d20d3b376672 

3. 解壓縮下載后的虛擬機文件到一個硬盤空間比較大的硬盤分區中.

4. 打開解壓縮的文件目錄

MySQL主從同步實驗

雙擊文件centos-5.5-x86_64-server.vmx,然后啟動vmware虛擬機

MySQL主從同步實驗

點擊圖中紅色區域的按鈕, 啟動虛擬機

5. 登錄系統

如下圖, 啟動后系統如下界面

MySQL主從同步實驗

圖中1位置表示當前虛擬機的運行狀態

圖中2位置表示當前虛擬機的名稱, 例如圖中有多個虛擬機, 當前正在看到到是 centos-5.5-x86_64-server這個虛擬機

圖中3位置  表示當前用戶 操作的鍵盤,鼠標還是在用戶自己的計算機中, 你的輸入,你的鼠標移動都是給你自己的操作系統的. 請特別注意 白色的鼠標箭頭,這 個是最明顯的看到你當前在那個系統下的標記.

用戶需要在黑色窗口中心附近點擊鼠標左鍵 ,這樣就可以切換的鍵盤及鼠標操作到虛擬機中去.以后在輸入鍵盤及鼠標移動等消息是發送給虛擬機的,你的本機程序將無法獲得信息.(用戶若是需要重虛擬機中退出請求等, 需要 按住左側 的ctrl 同時在按住 左側的 alt兩個組合鍵,鼠標將退回到當前操作系統狀態,用戶可以繼續輸入數據了.)

用戶點擊鼠標左鍵后, 在登錄頁面可以輸入用戶名 :root

然后提示輸入密碼信息, 用戶可以輸入原始密碼 :"thoughtpolice"(密碼是雙引號中內容)The root password for this image is "thoughtpolice".

6. 查看虛擬機ip地址

MySQL主從同步實驗

如上圖:   圖1. 處輸入root(用戶名)

圖2. 輸入密碼thoughtpolice

圖3. 輸入ifconfig命令, 

最后系統會顯示下面的 提示信息

圖4  處 是 本機當前ip地址.

7. 配置SecureCRT軟件,

SecureCRT是一常見的linux終端軟件,我們可以通過這個軟件登錄我們的虛擬機系統,完成各種操作,他的操作方法比直接在虛擬機上操作方便多了.軟件的下載及安裝大家自己去搜索及下載.

MySQL主從同步實驗

安裝完成后, 啟動軟件, 然后點擊

圖1處 啟動快速連接, 

圖2處 輸入ip地址

圖3處 輸入用戶名

二. MySQL安裝

1. 安裝前的准備工作

在SecureCRT登錄后, 執行:  yum list | grep mysql 命令, 結果如下圖:

MySQL主從同步實驗

然后顯示相關的軟件包列表, 右側2的位置是軟件報的相關信息.

若是出現下圖的信息, 

MySQL主從同步實驗

表示軟件包已經被安裝了,我們需要卸載他. (用 yum  remove 包名進行卸載, 這里可能需要的是:yum remove mysql.x86_64 ).

2. 配置mysql的yum數據源.

在命令行中輸入: vi /etc/yum.repos.d/Percona.repo 打開vi編輯器

然后進入輸入模式, 最后輸入如下文本:

[percona]

name = CentOS $releasever – Percona

baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/

enabled = 1

gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona

gpgcheck = 1

最后結果如下:

MySQL主從同步實驗

在命令提示行中 輸入:vi /etc/pki/rpm-gpg/RPM-GPG-KEY-percona 

然后輸入文本:

—–BEGIN PGP PUBLIC KEY BLOCK—–

Version: GnuPG v1.4.9 (GNU/Linux)

mQGiBEsm3aERBACyB1E9ixebIMRGtmD45c6c/wi2IVIa6O3G1f6cyHH4ump6ejOi

AX63hhEs4MUCGO7KnON1hpjuNN7MQZtGTJC0iX97X2Mk+IwB1KmBYN9sS/OqhA5C

itj2RAkug4PFHR9dy21v0flj66KjBS3GpuOadpcrZ/k0g7Zi6t7kDWV0hwCgxCa2

f/ESC2MN3q3j9hfMTBhhDCsD/3+iOxtDAUlPMIH50MdK5yqagdj8V/sxaHJ5u/zw

YQunRlhB9f9QUFfhfnjRn8wjeYasMARDctCde5nbx3Pc+nRIXoB4D1Z1ZxRzR/lb

7S4i8KRr9xhommFnDv/egkx+7X1aFp1f2wN2DQ4ecGF4EAAVHwFz8H4eQgsbLsa6

7DV3BACj1cBwCf8tckWsvFtQfCP4CiBB50Ku49MU2Nfwq7durfIiePF4IIYRDZgg

kHKSfP3oUZBGJx00BujtTobERraaV7lIRIwETZao76MqGt9K1uIqw4NT/jAbi9ce

rFaOmAkaujbcB11HYIyjtkAGq9mXxaVqCC3RPWGr+fqAx/akBLQ2UGVyY29uYSBN

eVNRTCBEZXZlbG9wbWVudCBUZWFtIDxteXNxbC1kZXZAcGVyY29uYS5jb20+iGAE

ExECACAFAksm3aECGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRAcTL3NzS79

Kpk/AKCQKSEgwX9r8jR+6tAnCVpzyUFOQwCfX+fw3OAoYeFZB3eu2oT8OBTiVYu5

Ag0ESybdoRAIAKKUV8rbqlB8qwZdWlmrwQqg3o7OpoAJ53/QOIySDmqy5TmNEPLm

lHkwGqEqfbFYoTbOCEEJi2yFLg9UJCSBM/sfPaqb2jGP7fc0nZBgUBnFuA9USX72

O0PzVAF7rCnWaIz76iY+AMI6xKeRy91TxYo/yenF1nRSJ+rExwlPcHgI685GNuFG

chAExMTgbnoPx1ka1Vqbe6iza+FnJq3f4p9luGbZdSParGdlKhGqvVUJ3FLeLTqt

caOn5cN2ZsdakE07GzdSktVtdYPT5BNMKgOAxhXKy11IPLj2Z5C33iVYSXjpTelJ

b2qHvcg9XDMhmYJyE3O4AWFh2no3Jf4ypIcABA0IAJO8ms9ov6bFqFTqA0UW2gWQ

cKFN4Q6NPV6IW0rV61ONLUc0VFXvYDtwsRbUmUYkB/L/R9fHj4lRUDbGEQrLCoE+

/HyYvr2rxP94PT6Bkjk/aiCCPAKZRj5CFUKRpShfDIiow9qxtqv7yVd514Qqmjb4

eEihtcjltGAoS54+6C3lbjrHUQhLwPGqlAh8uZKzfSZq0C06kTxiEqsG6VDDYWy6

L7qaMwOqWdQtdekKiCk8w/FoovsMYED2qlWEt0i52G+0CjoRFx2zNsN3v4dWiIhk

ZSL00Mx+g3NA7pQ1Yo5Vhok034mP8L2fBLhhWaK3LG63jYvd0HLkUFhNG+xjkpeI

SQQYEQIACQUCSybdoQIbDAAKCRAcTL3NzS79KlacAJ0aAkBQapIaHNvmAhtVjLPN

wke4ZgCePe3sPPF49lBal7QaYPdjqapa1SQ=

=qcCk

—–END PGP PUBLIC KEY BLOCK—–

最后顯示如下:

MySQL主從同步實驗

最后輸入 yum list | grep ercona | grep 55 查看源是否配置完成

MySQL主從同步實驗

圖中顯示的 幾個 installed狀態, 因為當前的虛擬中安裝mysql造成的,沒去卸載就截圖了,用戶安裝的時候應顯示的Percona的.

3. 安裝Mysql

運行如下命令:

yum install -y Percona-Server-test-55.x86_64

之后運行如下命令: 

yum install -y Percona-Server-server-55.x86_64 

最后運行: 

reboot命令, 重新啟動服務器系統

三. 復制虛擬機

1. 關閉虛擬機

在linux終端下,調用shutdown now 命令,關閉linux虛擬機

2. Clone linux虛擬機

MySQL主從同步實驗

MySQL主從同步實驗

3. 啟動clone后虛擬機, 檢查虛擬機的ip地址, 有了這個ip地址才好進授權(msyql同步帳號的授權)工作

四. 配置mysql主從環境

1. Mysql主從服務器環境

l Mysql主服務器相關配置

[root@mysql01 ~]# hostname

mysql01

[root@mysql01 ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:CC:9B:AA  

inet addr:192.168.2.66  Bcast:192.168.2.255  Mask:255.255.255.0

          …………..

[root@mysql01 ~]# 

l 從服務器配置

[root@mysql02 ~]# hostname

mysql02

[root@mysql02 ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:BC:22:5B  

inet addr:192.168.2.97  Bcast:192.168.2.255  Mask:255.255.255.0

          ……

[root@mysql02 ~]# 

2. 在主服務器配置同步帳號

首先如下圖登錄mysql服務器

MySQL主從同步實驗

在命令提示符中輸入下面命令, 注意帳號:repl, ip地址:2.97, 密碼:123456, 注意授權全部的 數據庫

grant replication slave on *.* to ‘repl’@’192.168.2.97′ identified by  ’123456′;(注意:去除前面的空格)

輸入完成后如下圖

MySQL主從同步實驗

要注意: 要在mysql01就是做master的機器上執行

        Sql語句中要去除前面的多余空格(里面有可能有中文空格等)

執行完畢一般需要同 flush語句進行處理, 但我們稍后要重新啟動mysql服務器因此就不需要了, 直接輸入 \q; 退出 mysql程序.

3. 生成 mysql的配置文件

l 執行搜索命令,查找mysql 配置文件模板

find / -name *.cnf 最后顯示如下:

MySQL主從同步實驗

注意圖中綠色區域

l 生成配置文件

輸入如下命令:

# cat /usr/share/doc/Percona-Server-server-55-5.5.28/my-large.cnf > /etc/my.cnf

l 編輯配置文件

vi /etc/my.cnf 文件

MySQL主從同步實驗

注意在中的[mysqld]配置區域中, 的綠色區域附近添加粉色區域的 文本, 表示不同步 mysql數據庫

binlog-ignore-db=mysql

l 重新啟動mysql服務

執行service mysql restart 命令重新啟動mysql服務器

MySQL主從同步實驗

4. 配置從服務器

開始從服務器的虛擬機, 通過linux終端連接到從服務器的虛擬機,然后按照下面步驟完成相應工作.

l 生成配置文件

# cat /usr/share/doc/Percona-Server-server-55-5.5.28/my-large.cnf > /etc/my.cnf

vi /etc/my.cnf 文件, 添加如下代碼server-id       = 2

MySQL主從同步實驗

l 重新啟動mysql服務

[root@mysql02 ~]# service mysql restart

Shutting down MySQL (Percona Server)…[  OK  ]

Starting MySQL (Percona Server)..[  OK  ]

MySQL主從同步實驗

l 執行修改主從的sql語句

首先如上圖登錄 mysql的客戶端中, 然后執行下面的sql語句,來設置從那里進行數據的同步操作

CHANGE MASTER TO MASTER_HOST=’192.168.2.66′,  MASTER_PORT=3306, MASTER_USER=’repl’,  MASTER_PASSWORD=’123456′, MASTER_CONNECT_RETRY=2;

l 開始slave服務

在mysql的sql界面中執行

start slave; 

開始mysql的 slave功能

l 顯示工作狀態

在mysql的sql界面中執行如下語句

show slave status\G; 

顯示情況如下:

MySQL主從同步實驗

l 查看從服務器目錄文件

MySQL主從同步實驗

如上圖進入相關mysql的目錄,檢查相關文件注意紅色區域文件及綠色區域文件

5. 主數據庫執行創建數據庫語句

mysql> CREATE DATABASE `mytest` CHARACTER SET ‘utf8′ COLLATE ‘utf8_general_ci’;

Query OK, 1 row affected (0.00 sec)

6. 從庫中執行顯示數據庫的命令

show databases;

MySQL主從同步實驗

顯示情況如上, 已經將新創舉的數據庫從主庫同步到從庫了.

相關文章

    • Haproxy安裝和動態配置更改測試
      本文主要描述haproxy的安裝及簡單配置過程。並且應用這個簡單的配置做mysql的負載均衡,同時haproxy的配置文件發生變化時我們如何重新啟動haproxy程序,並且確定haproxy程序重新啟...
    • 基於數據庫的權限系統的設計
      這一天將講述一個基本的基於數據庫的權限管理系統的設計,在這一天的課程的最后將講述“左右值無限分類實現算法”如何來優化“系統菜單”的結構而告終。今天的內容和前幾天的基礎框架是一樣的它們都屬於基礎知識,在...
    • MySQL 數據庫的備份和恢復
      本文討論 MySQL 的備份和恢復機制,以及如何維護數據表,包括最主要的兩種表類型:MyISAM 和 Innodb,文中設計的 MySQL 版本為 5.0.22。 目前 MySQL 支持的免費備份工...
    • linux centos下配置mysql主從同步的步驟
      來源:互聯網 linux centos下配置mysql主從同步的步驟: 一、主機環境 主機: master操作系統:centos 5.3 IP:192.168.1....
    • MySQL主從同步加速 Transfer– FAQ
      來源:互聯網 Q: Transfer是什么 A: 是一個解決MySQL原生主從同步延遲的方案。 Transfer本身是一個在MySQL源碼上打的patch,可以用於當Slave,也可以用於當第三方...

http://www.iigrowing.cn/mysql-zhu-cong-tong-bu-shi-yan.html


免責聲明!

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



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