mycat搭建mysql高可用分布式數(shù)據(jù)庫(分庫混埠,分表,讀寫分離诗轻,主從切換)

1.環(huán)境準備:

服務器centos7.2.5: 172.18.113.37(主) 172.18.113.38(從)兩臺
數(shù)據(jù)庫mysql-5.7.25:
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
數(shù)據(jù)庫中間件mycat-1.6.7.1:
wget http://dl.mycat.io/1.6.7.1/Mycat-server-1.6.7.1-release-20190213150257-linux.tar.gz
yum mysql數(shù)據(jù)依賴的libaio 庫
yum search libaio
yum install libaio

2.mysql安裝:

a.添加mysql組:groupadd mysql

b.添加mysql組mysql用戶:useradd mysql -g mysql

c.上傳mysql包至該路徑 : cd /home/mysql;
解壓:tar -zxvf MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
更改目錄名稱: mv ./mysql-5.7.25-linux-glibc2.12-x86_64/ ./mysql
解壓目錄結構:

1.png

d.初始化mysql: bin/mysqld --initialize --user=mysql

e.添加到MySQL 啟動腳本到系統(tǒng)服務
cp support-files/mysql.server/etc/init.d/mysql.server

f.啟動MySQL服務
啟動方式一: bin/mysqld_safe --user=mysql &
啟動方式二: service mysql.server start 或者 /support-files/mysql.server start
如若出現(xiàn)報錯:mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'. ERROR! The server quit without updating PID file (/var/lib/mysql/node1.pid).
給日志目錄授予讀寫權限:
$ mkdir /var/log/mariadb
$ touch /var/log/mariadb/mariadb.log
$ chown -R mysql:mysql /var/log/mariadb

g.登陸mysql:
mysql免密登陸: vim /etc/my.cnf 在[mysqld] 下面新增一行 skip- grant-tables
登陸報錯:
bin/mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server
through socket '/tmp/mysql.sock' (2)
故障分析
查看mysql實例的狀態(tài)
$ netstat -ntlp | grep 3306tcp6 0 0 :::3306 :::* LISTEN 10794/mysqld
查看my.cnf關于socket的配置
$ more /etc/my.cnf |grep sock socket=/var/lib/mysql/mysql.sock
解決方法,修改/etc/my.cnf
$ vi /etc/my.cnf
修改 [mysqld]組下的 socket 路徑钳宪,我是選擇注釋掉,加一行為
tmp/mysql.soc
[mysqld]
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
socket=/tmp/mysql.sock

h.重啟MySQL 服務
$ service mysql.server start
$Shutting down MySQL.. SUCCESS!

i.設置MySQL密碼
mysql> use mysql;
mysql> update user set host='%',authentication_string
=password("mima") where user='root';
mysql> flush privileges;
mysql> grant all privileges on *.* to 'root'@'%' identified by
'mima' with grant option;
mysql> flush privileges;
mysql> exit;

j.去除免密登陸腳本,skip-grant-tables 使用最高權限root用
戶登陸數(shù)據(jù)庫

3.mysql主主復制扳炬,雙向主備吏颖,高可用分布式數(shù)據(jù)庫方案

原理:主主復制在兩臺MySQL互為主從,它們都可以變更數(shù)據(jù)恨樟,其中一臺變更了數(shù)據(jù)另外一臺也會同步相應的變更半醉。
1.兩臺mysql都可讀寫,互為主備劝术,默認只使用一臺(masterA)負責數(shù)據(jù)的寫入奉呛,另一臺(masterB)備用计螺。
2.masterA是masterB的主庫,masterB又是masterA的主庫瞧壮,它們互為主從。

a.準備工作

搭建mysql見步驟2
Mysql版本:MySQL 5.7.25
Master-Server : 172.18.113.37
Slave-Server : 172.18.113.38

b. Master-Server 配置

修改 my.cnf
配置 Master 以使用基于二進制日志文件位置的復制匙握,必
須啟用二進制日志記錄并建立唯一的服務器ID,否則則無
法進行主從復制咆槽。
停止MySQL服務。
開啟binlog 圈纺,每臺設置不同的 server-id
$ service mysql.server stop
$ cat /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=37

啟動mysql配置 創(chuàng)建擁有REPLICATION SLAVE權限的用戶秦忿,從庫可以使用該用戶連接進行數(shù)據(jù)復制(指定到只有從庫可以連接)
$ /usr/local/mysql/bin/mysql -uroot -p
mysql> CREATE USER 'replication'@'172.18.113.38'
IDENTIFIED BY 'mima';
mysql> GRANT REPLICATION SLAVE ON *.* TO
'replication'@'172.18.113.38';

c.Slave-Server 配置

修改 my.cnf 停止MySQL服務,每個server-id都必須唯一,一般以ip后兩位
$ service mysql.server stop
$ cat /etc/my.cnf
[mysqld]
server-id=38

啟動登錄MySQL服務
$ service mysql.server start
$ /home/mysql/bin/mysql -uroot -p

d配置主庫通信

登陸主庫查看 Master-Server 蛾娶, binlog File 文件名稱和 Position值位置 并且記下來
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000015 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+

登陸從庫配置剛才步驟b在主庫配置的擁有復制權限的replication用戶
執(zhí)行如下語句:MASTER_LOG_POS給0也沒問題
mysql> CHANGE MASTER TO
-> MASTER_HOST='172.18.113.37',
-> MASTER_USER='replication',
-> MASTER_PASSWORD='mima',
-> MASTER_LOG_FILE='mysql-bin.000015 ',
-> MASTER_LOG_POS=154 ;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

啟動從服務器復制線程
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

查看復制狀態(tài)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.18.113.37
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000015
Read_Master_Log_Pos: 154
Relay_Log_File: master2-relay-bin.000003
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
檢查主從復制通信狀態(tài)
Slave_IO_State #從站的當前狀態(tài)
Slave_IO_Running: Yes #讀取主程序二進制日志的I/O線程是否正在運行
Slave_SQL_Running: Yes #執(zhí)行讀取主服務器中二進制日志事件的SQL線程是否正在運行灯谣。與I/O線程一樣
Seconds_Behind_Master #是否為0,0就是已經同步了

e.注意事項!!

如果需要配置雙向主從蛔琅,服務器反過來執(zhí)行一遍
主從復制會從服務器通過I/O線程從主服務器中通過中繼日志同步變更過的數(shù)據(jù)到從服務器胎许,所以需要保證I/O線程的通暢也就是Slave_SQL_Running必須一直處于yes狀態(tài) 否則無法完成同步
從服務器默認會同步主服務器中所有的變更數(shù)據(jù)庫信息 有時候我們卻只需要同步我們想要的數(shù)據(jù)庫信息 這時可以配置一下Replicate_Do_DB屬性指定需要同步的數(shù)據(jù)庫
vim /etc/my.cnf
[mysqld]
replicate-do-db=ensen_db1
replicate-do-db=ensen_db2
replicate-do-db=ensen_db3

4.mycat中間件搭建,實現(xiàn)讀寫分離罗售,分表分庫

a.環(huán)境

MySql-Master:172.18.113.37
MySql-Slave:172.18.113.38
Mycat:172.18.113.37

b.MySql 主從復制

見步驟3

c.在主庫172.18.113.37建庫 測試主從復制是否可用

CREATE DATABASE `ensen_db1`;
CREATE DATABASE `ensen_db2`;
CREATE DATABASE `ensen_db3`;

d.安裝 JDK

由于mycat是使用java開發(fā)的中間件 所以需要jdk的支持
未安裝的請先自行安裝好jdk1.8以上版本然后再往下操作

e.搭建mycat

上傳步驟1下載好的Mycat-server-1.6.7.1-release-20190213150257-linux.tar.gz包至/home/mysql/目錄
解壓:tar -zxvf Mycat-server-1.6.7.1-release-20190213150257-linux.tar.gz得到mycat目錄

配置mycat環(huán)境變量
vim /etc/profile
export PATH=${JAVA_HOME}/bin:${MYCAT_HOME}/lib:$PATH
export MYCAT_HOME=/home/mysql/mycat/
source /etc/profile
進入mycat/conf目錄編輯wrapper.conf
# Java Application
wrapper.java.command=你的jdk安裝目錄
wrapper.working.dir=..

f.配置 Mycat

本文只是簡單配置在不同的服務器上進行讀寫分離只需要配置兩個文件 server.xml 和 schema.xml

schema.xml 中定義邏輯庫辜窑,表、分片節(jié)點等內容
rule.xml 中定義分片規(guī)則
server.xml 中定義用戶以及系統(tǒng)相關變量寨躁,如端口等

關于ER分片策略的兩種情況分析:
a.父表按照主鍵ID分片穆碎,子表的分片字段與父表的ID進行關聯(lián),配置為ER分片职恳,子表插入直接使用父表的分片規(guī)則所禀,如果沒有外鍵的約束即使子表在父表找不到相應的數(shù)據(jù),也能插入成功放钦,只要分片規(guī)則中有所定義色徘。所以對于這種情況,子表在插入數(shù)據(jù)時候不會去判斷主表中是否存在關聯(lián)的數(shù)據(jù)最筒,而是直接根據(jù)主表的分片規(guī)則進行插入操作
b.父表分片字段為其他字段贺氓,子表的分片字段與父表的ID進行關聯(lián),配置為ER分片床蜘,這種情況子表插入會依次到各個節(jié)點中去尋找辙培,直到找到對應的節(jié)點,否則會報can't find (root) parent sharding node for sql找不到父分片節(jié)點

g.啟動 Mycat

cd /home/mysql/mycat/bin
./mycat start啟動mycat
./mycat stop停止mycat
./mycat status查看mycat狀態(tài)
./mycat restart重啟mycat

h.查看日志

啟動 mycat 的日志
tail -f /home/mysql/mycat/logs/wrapper.log
訪問 mycat 的日志
tail -f/home/mysql/mycat/logs/mycat.log

i.Mycat的使用

登錄 Mycat 客戶端
mysql -uroot -p -h密碼 172.18.113.37 -P 8066
mysql> show databases;
mysql> use test_schema;

mysql> use tables;

登錄 Mycat 管理端
mysql -uroot -p密碼 -h172.18.113.37 -P 9066

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末邢锯,一起剝皮案震驚了整個濱河市扬蕊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丹擎,老刑警劉巖尾抑,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歇父,死亡現(xiàn)場離奇詭異,居然都是意外死亡再愈,警方通過查閱死者的電腦和手機榜苫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翎冲,“玉大人垂睬,你說我怎么就攤上這事】购罚” “怎么了驹饺?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缴渊。 經常有香客問我赏壹,道長,這世上最難降的妖魔是什么衔沼? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任蝌借,我火速辦了婚禮,結果婚禮上俐巴,老公的妹妹穿的比我還像新娘骨望。我一直安慰自己,他們只是感情好欣舵,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布擎鸠。 她就那樣靜靜地躺著,像睡著了一般缘圈。 火紅的嫁衣襯著肌膚如雪劣光。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天糟把,我揣著相機與錄音绢涡,去河邊找鬼。 笑死遣疯,一個胖子當著我的面吹牛雄可,可吹牛的內容都是我干的。 我是一名探鬼主播缠犀,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼数苫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辨液?” 一聲冷哼從身側響起虐急,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滔迈,沒想到半個月后止吁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體被辑,經...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年敬惦,在試婚紗的時候發(fā)現(xiàn)自己被綠了盼理。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡俄删,死狀恐怖榜揖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情抗蠢,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布思劳,位于F島的核電站迅矛,受9級特大地震影響,放射性物質發(fā)生泄漏潜叛。R本人自食惡果不足惜秽褒,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望威兜。 院中可真熱鬧销斟,春花似錦、人聲如沸椒舵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笔宿。三九已至犁钟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泼橘,已是汗流浹背涝动。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留炬灭,地道東北人醋粟。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像重归,于是被迫代替她去往敵國和親米愿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內容