Linux下Mysql主從復(fù)制及Mycat讀寫分離配置

轉(zhuǎn)自http://blog.csdn.net/jaysonhu/article/details/52858535

mysql安裝

  1. 下載mysql

  2. 解壓
    tar -zxvf mysql-5.6.32-linux-glibc2.5-x86_64.tar.gz

  3. 把mysql文件夾移動到 /usr/local/ 下
    mv mysql-5.6.32-linux-glibc2.5-x86_64 /usr/local/mysql

  4. 創(chuàng)建mysql用戶和組

    groupadd mysql
    adduser -r -g mysql mysql
    chown -R mysql.mysql /usr/local/mysql  //修改mysql目錄所屬mysql用戶
    
  5. 安裝

    /usr/local/mysql/scripts/mysql_install_db

  6. 修改配置文件my.cnf,必須要修改才能使用mycat

    最后一行添加

    lower_case_table_names = 1

  7. 設(shè)置mysql服務(wù)

    cp -f /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld
    
  8. 啟動mysql

    service mysqld start

  9. 把mysql命令加入環(huán)境變量

    修改/etc/profile文件,最后行添加
    export PATH=$PATH:/usr/local/mysql/bin

    然后執(zhí)行

    source /etc/profile

    使配置立即生效

  10. 登陸mysql如果提示錯誤
    Can't connect to local MySQL server through socket '/tmp/mysql.sock'
    執(zhí)行命令
    ln /var/lib/mysql/mysql.sock /tmp/mysql.sock
    后再登陸

  11. root用戶初始密碼為空,修改密碼使用mysqladmin命令
    mysqladmin -uroot -p password

  12. 登陸客戶端

    mysql -uroot -p

  13. 創(chuàng)建測試數(shù)據(jù)庫

 CREATE database db1;
 CREATE database db2;
 CREATE database db3;

至此mysql已經(jīng)安裝完成了

安裝java

mycat安裝

  1. 下載mycat

  2. 解壓

    tar -zxvf Mycat-server-1.6-RELEASE-20161012170031-linux.tar.gz

  3. 把mycat文件夾移動到 /usr/local/ 下
    mv Mycat-server-1.6-RELEASE-20161012170031-linux /usr/local/mycat

  4. 新建用戶和組

    groupadd mycat
    adduser -r -g mycat mycat
    chown -R mycat.mycat /usr/local/mycat  //修改mycat目錄所屬mycat用戶
    
  5. 修改配置文件 /usr/local/mycat/conf/schema.xml

    這里配置mysql的地址困食、用戶名和密碼

    <writeHost host="hostM1" url="localhost:3306" user="root" password="root">
        <readHost host="hostS1" url="localhost:3306" user="root" password="root" />
    </writeHost>
    

    server.xml

    這里配置mycat的用戶名密碼

    <user name="root">
       <property name="password">digdeep</property>
       <property name="schemas">TESTDB</property>
    </user>
    
  6. 啟動mycat

    /usr/local/mycat/bin/mycat start

  7. 連接mycat

    mysql -uroot -pdigdeep -h127.0.0.1 -P8066 -DTESTDB

    注意這里 -h 后面必須是ip囚似,使用localhost會出錯

  8. 創(chuàng)建測試數(shù)據(jù)

use TESTDB;
create table company(id int not null primary key,name varchar(50),addr varchar(255));
insert into company values(1,"facebook","usa");
  1. 結(jié)果:查看mysql上的數(shù)據(jù)庫db1,db2,db3上都創(chuàng)建了表company

mysql主從服務(wù)器配置

  1. 修改主mysql配置文件my.cnf

    [mysqld]
    log_bin = mysql-bin  #記錄操作日志
    binlog_ignore_db =  mysql  #不同步mysql系統(tǒng)數(shù)據(jù)庫
    server_id = 1
    
  2. 啟動主mysql饮亏,在主mysql創(chuàng)建一個用戶user讓從mysql連接,執(zhí)行sql

    grant replication slave on *.* to 'user'@'%' identified by 'password'
    
  3. 修改從mysql配置文件my.cnf

    log_bin = mysql-bin  #記錄操作日志
    replicate_ignore_db = mysql #不同步mysql系統(tǒng)數(shù)據(jù)庫
    slave_skip_errors = all 
    server_id = 2
    
  4. 主mysql執(zhí)行sql

    show master status;\G

    1.jpg

  5. 從mysql連接主mysql

    根據(jù)第2步配創(chuàng)建的user,password 和 第4步獲取的file珍手,position 連接主mysql

//如果是mysql5.5
change master to master_host='node1',master_user='user',master_password='password',master_log_file='mysql-bin.000004',master_log_pos=120;
//如果是mysql5.6即以上可以不需要master_log_file和master_log_pos,mysql會自動識別
change master to master_host='node1',master_user='user',master_password='password';
  1. 開啟從mysql辞做,從mysql中執(zhí)行

    start slave;

  2. 查看從mysql狀態(tài)琳要,從mysql執(zhí)行

    show slave status\G;

    2.png

    紅色下劃線部分為yes則開啟成功

  3. 測試成果

    首先在主從mysql上都新建數(shù)據(jù)庫testdb

    主mysql:use testdb;create table user(id int not null primary key,name varchar(50));

    從mysql上也會產(chǎn)生user表,主從mysql配置成功秤茅!

讀寫分離配置

  1. 注意事項

    遠(yuǎn)程 mysql 必須允許 mycat主機(jī) 遠(yuǎn)程連接稚补,修改mysql.user表中的用戶數(shù)據(jù),執(zhí)行sql

    update mysql.user set host = '%' where user = 'root'
    
  2. schema.xml配置

    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
    writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">
        <heartbeat>show slave status</heartbeat>
        <writeHost host="hostM1" url="node1:3306" user="root" password="root">
            <readHost host="hostS1" url="node2:3306" user="root" password="root" />
        </writeHost>
    </dataHost>
    

    dbDriver

    屬性

    指定連接后端數(shù)據(jù)庫使用的 Driver框喳,目前可選的值有 native 和 JDBC课幕。使用 native 的話,因為這個值執(zhí)行的是二進(jìn)制的 mysql 協(xié)議五垮,所以可以使用 mysql 和 maridb乍惊。其他類型的數(shù)據(jù)庫則需要使用 JDBC 驅(qū)動來支持。

    從 1.6 版本開始支持 postgresql 的 native 原始協(xié)議放仗。

    如果使用 JDBC 的話需要將符合 JDBC 4 標(biāo)準(zhǔn)的驅(qū)動 JAR 包放到 MYCAT\lib 目錄下润绎,并檢查驅(qū)動 JAR 包中包括如下目錄結(jié)構(gòu)的文件:META-INF\services\java.sql.Driver。在這個文件內(nèi)寫上具體的 Driver 類名诞挨,例如:com.mysql.jdbc.Driver莉撇。

    balance

    屬性

    負(fù)載均衡類型,目前的取值有 3 種:

    1. balance=”0”, 不開啟讀寫分離機(jī)制惶傻,所有讀操作都發(fā)送到當(dāng)前可用的 writeHost 上棍郎。

    2. balance=”1”,全部的 readHost 與 stand by writeHost 參與 select 語句的負(fù)載均衡银室,簡單的說坝撑,當(dāng)雙主雙從模式(M1->S1,M2->S2粮揉,并且 M1 與 M2 互為主備)巡李,正常情況下,M2,S1,S2 都參與 select 語句的負(fù)載均衡扶认。

    3. balance=”2”侨拦,所有讀操作都隨機(jī)的在 writeHost、readhost 上分發(fā)辐宾。

    4. balance=”3”狱从,所有讀請求隨機(jī)的分發(fā)到 wiriterHost 對應(yīng)的 readhost 執(zhí)行膨蛮,writerHost 不負(fù)擔(dān)讀壓

      力,注意 balance=3 只在 1.4 及其以后版本有季研,1.3 沒有敞葛。

    writeType

    屬性

    負(fù)載均衡類型,目前的取值有 3 種:

    1. writeType=”0”, 所有寫操作發(fā)送到配置的第一個 writeHost与涡,第一個掛了切到還生存的第二個

      writeHost惹谐,重新啟動后已切換后的為準(zhǔn),切換記錄在配置文件中:dnindex.properties .

    2. writeType=”1”驼卖,所有寫操作都隨機(jī)的發(fā)送到配置的 writeHost氨肌,1.5 以后廢棄不推薦。

    switchType

    屬性

    • -1 表示不自動切換

    • 1 默認(rèn)值酌畜,自動切換

    • 2 基于 MySQL 主從同步的狀態(tài)決定是否切換

      心跳語句為 show slave status

  3. 根據(jù)主從延時切換技術(shù)

    Mycat1.4開始支持 MySQL主從復(fù)制狀態(tài)綁定的讀寫分離機(jī)制怎囚,讓讀更加安全可靠,配置如下: MyCAT心跳檢查語句配置為 show slave status 桥胞,dataHost 上定義兩個新屬性: switchType=”2” 與slaveThreshold=”100”恳守,此時意味著開啟MySQL主從復(fù)制狀態(tài)綁定的讀寫分離與切換機(jī)制,Mycat心跳機(jī)制通過檢測 show slave status 中的 “Seconds_Behind_Master”, “Slave_IO_Running”, “Slave_SQL_Running” 三個字段來確定當(dāng)前主從同步的狀態(tài)以及Seconds_Behind_Master 主從復(fù)制時延贩虾, 當(dāng)Seconds_Behind_Master>slaveThreshold 時催烘,讀寫分離篩選器會過濾掉此Slave機(jī)器,防止讀到很久之前的舊數(shù)據(jù)整胃,而當(dāng)主節(jié)點宕機(jī)后颗圣,切換邏輯會檢查Slave上的Seconds_Behind_Master是否為0,為0時則表示主從同步屁使,可以安全切換在岂,否則不會切換。

  4. 重啟mycat蛮寂,連接創(chuàng)建測試數(shù)據(jù)

    use TESTDB;
    create table company(id int not null primary key,name varchar(50),addr varchar(255));
    insert into company values(1,"facebook","usa");
    
  5. 結(jié)果:查看主從mysql上的db1,db2,db3上都創(chuàng)建了表company

  6. 如果你的mysql的復(fù)制模式為STATEMENT(可以在my.cnf中配置binlog_format="STATEMENT")蔽午,還可以這樣測試。

    mycat執(zhí)行sql :

    insert into company values(1,@@hostname,"usa");`
    select * from company ;
    
3.jpg
 可以看出酬蹋,讀取數(shù)據(jù)是從從mysql讀出的
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末及老,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子范抓,更是在濱河造成了極大的恐慌骄恶,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匕垫,死亡現(xiàn)場離奇詭異僧鲁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門寞秃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斟叼,“玉大人,你說我怎么就攤上這事春寿±噬” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵绑改,是天一觀的道長谢床。 經(jīng)常有香客問我,道長绢淀,這世上最難降的妖魔是什么萤悴? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任瘾腰,我火速辦了婚禮皆的,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蹋盆。我一直安慰自己费薄,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布栖雾。 她就那樣靜靜地躺著楞抡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪析藕。 梳的紋絲不亂的頭發(fā)上召廷,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音账胧,去河邊找鬼竞慢。 笑死,一個胖子當(dāng)著我的面吹牛治泥,可吹牛的內(nèi)容都是我干的筹煮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼居夹,長吁一口氣:“原來是場噩夢啊……” “哼败潦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起准脂,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤劫扒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后狸膏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沟饥,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了闷板。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澎灸。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖遮晚,靈堂內(nèi)的尸體忽然破棺而出性昭,到底是詐尸還是另有隱情,我是刑警寧澤县遣,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布糜颠,位于F島的核電站,受9級特大地震影響萧求,放射性物質(zhì)發(fā)生泄漏其兴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一夸政、第九天 我趴在偏房一處隱蔽的房頂上張望元旬。 院中可真熱鬧,春花似錦守问、人聲如沸匀归。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽穆端。三九已至,卻和暖如春仿便,著一層夾襖步出監(jiān)牢的瞬間体啰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工嗽仪, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留荒勇,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓钦幔,卻偏偏與公主長得像枕屉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鲤氢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容