Linux MySQL 主從配置

[TOC]

主從數(shù)據(jù)庫原理

主庫 master

當(dāng) master 每做一次 write 操作具则,就會將操作的命令記錄到 master 的 Binary-log(bin-log)日志中宫莱。

從庫 slave

slave 中默認(rèn)會有兩條線程

IO Thread:讀取 master 中的 bin-log 內(nèi)容壕探,寫入到 slave 中的 relay-log教藻。

SQL Thread:slave 讀取 relay-log墓捻,將操作寫入到 slave 數(shù)據(jù)庫致板。

一交煞、云服務(wù)器配置

1.1 騰訊云

(1)在騰訊云控制臺上,設(shè)置主數(shù)據(jù)庫外網(wǎng)訪問權(quán)限

(2)修改 MySQL配置文件斟或,設(shè)置 3306 端口外部訪問權(quán)限

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

bind_address 的值由 '127.0.0.1'改成你騰訊云內(nèi)網(wǎng)IP地址素征。

重啟 MySQL 服務(wù)器,然后輸入 netstat -anpt|grep 3306 檢查3306端口是否顯示騰訊云的內(nèi)網(wǎng)IP。

1.2 阿里云

(1)修改主機(jī) MySQL 配置文件:

vi /etc/mysql/mysql.conf.d/mysqld.cnf

bind_address 一行注釋掉稚茅。

(2)然后在阿里云 ECS 控制臺上纸淮,為主機(jī)添加網(wǎng)絡(luò)安全組規(guī)則:

入方向
協(xié)議類型選擇 MySQL(3306)
授權(quán)類型改為地址段訪問
授權(quán)對象輸入:0.0.0.0/0

從機(jī)可以不用對外開放端口 3306。

二亚享、MySQL 主機(jī) master 配置

2.0 創(chuàng)建主機(jī) MySQL 數(shù)據(jù)庫

創(chuàng)建主機(jī)數(shù)據(jù)庫:mytest

create database mytest default character set utf8;

2.1 修改 MySQL 配置文件

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld] 模塊下添加如下內(nèi)容(默認(rèn)是注釋的咽块,解除注釋即可):

server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
binlog_do_db            = mytest # 需要做主從分離,主服務(wù)器 MySQL 的數(shù)據(jù)庫名
binlog_ignore_db        = mysql # 在主服務(wù)器上需要忽略的 MySQL 數(shù)據(jù)庫欺税,避免從服務(wù)器對主服務(wù)器的安全性影響

數(shù)據(jù)表名忽略大小寫侈沪,在 [mysqld] 模塊下添加如下內(nèi)容:

lower_case_table_names=1

修改完之后,記得要重啟 MySQL 服務(wù):

/etc/init.d/mysql restart;

2.2 創(chuàng)建一個(gè) MySQL 數(shù)據(jù)庫用戶晚凿,提供給從機(jī) slave 訪問

CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 

說明:

  • username - 你將創(chuàng)建的用戶名

  • host - 指定該用戶在哪個(gè)主機(jī)上可以登陸亭罪。如果是本地用戶可用 localhost, 如果想讓該用戶可以從任意遠(yuǎn)程主機(jī)登陸歼秽,可以使用通配符 % 应役。

  • password - 該用戶的登陸密碼,密碼可以為空燥筷,如果為空則該用戶可以不需要密碼登陸服務(wù)器.箩祥。

舉例:

CREATE USER 'mytest'@'%' IDENTIFIED BY 'mytest123!@#';

2.3 給剛才創(chuàng)建的用戶授權(quán)

grant all privileges on *.* to 'mytest'@'%'identified by 'mytest123!@#' with grant option;
flush privileges;  -- 更新權(quán)限,使之生效
  • all privileges 表示授權(quán)全部的權(quán)限肆氓。如果單獨(dú)指定權(quán)限袍祖,可以替換成:insert、select谢揪、update蕉陋、delete 等等;
  • *.* 表示這些權(quán)限是對所有的 數(shù)據(jù)庫.表 等生效拨扶。如果要單獨(dú)指定凳鬓,可以按照此格式 databasename.tablename
  • with grant option 表示創(chuàng)建的這個(gè)用戶還可以為其他用戶繼續(xù)賦予這些權(quán)限患民。

2.4 賦予從機(jī)復(fù)制主機(jī)數(shù)據(jù)的權(quán)力

從機(jī)可以通過主機(jī)創(chuàng)建的這個(gè)用戶連接上主機(jī)數(shù)據(jù)庫村视,然后復(fù)制主機(jī)的數(shù)據(jù)到從機(jī)數(shù)據(jù)庫。

GRANT REPLICATION SLAVE ON *.* TO 'mytest'@'%' IDENTIFIED BY 'mytest123!@#';

2.5 重啟主機(jī) MySQL 服務(wù)

sudo /etc/init.d/mysql restart

2.6 登錄主機(jī) MySQL酒奶,檢查主機(jī) master 的狀態(tài):

show master status;

會顯示如下內(nèi)容(例子):

   +------------------+----------+--------------+------------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
   +------------------+----------+--------------+------------------+
   | mysql-bin.000001 |      154 |              |                  |
   +------------------+----------+--------------+------------------+
   1 row in set (0.00 sec)

注意記錄 FilePosition 的值蚁孔,在從機(jī) slave 配置時(shí)會用到該屬性。

注:執(zhí)行完此步驟后不要再操作主服務(wù)器 MySQL惋嚎,防止主服務(wù)器 master 狀態(tài)值變化杠氢。如果對主機(jī)數(shù)據(jù)庫做了增刪改操作,會導(dǎo)致 Position 值發(fā)生變化另伍。

如果是在主節(jié)點(diǎn)開啟主從配置之前就已經(jīng)創(chuàng)建的表鼻百,是不會同步到從節(jié)點(diǎn)中绞旅。

三、MySQL 從機(jī) slave 配置

3.1 修改從機(jī) MySQL 配置文件

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld] 模塊中添加如下內(nèi)容:

server-id = 2
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index

主機(jī)中是 server-id = 1温艇,而從機(jī)與主機(jī)不一樣因悲,注意區(qū)分。

3.2 重啟從機(jī) MySQL 服務(wù)

sudo /etc/init.d/mysql restart

3.3 登錄從機(jī) MySQL勺爱,配置與主服務(wù)器 master 的連接

使用 root 帳號登錄到從機(jī) MySQL晃琳,執(zhí)行以下命令,將從機(jī)與主機(jī)關(guān)聯(lián):

-- 例子
change master to master_host='120.77.219.39',master_port=3306,master_user='mytest',master_password='mytest123!@#',master_log_file='mysql-bin.000001',master_log_pos=154;

說明:

  • master_host 對應(yīng)主服務(wù)器的外網(wǎng)IP地址 120.77.219.39
  • master_port 對應(yīng)主服務(wù)器的端口(3306)
  • master_log_file 對應(yīng) show master status 顯示的 File 列:mysql-bin.000001
  • master_log_pos 對應(yīng)前面記錄主機(jī)中顯示的 Position 的值琐鲁,否則有可能出現(xiàn)同步失敗卫旱。

3.4 在從服務(wù)器上創(chuàng)建同名從數(shù)據(jù)庫和同名用戶

該數(shù)據(jù)庫名稱需要與主服務(wù)器上 MySQL 配置文件中定義的 binlog_do_db = mytest 名稱一致:

create database mytest default character set utf8;

創(chuàng)建與主數(shù)據(jù)庫同名的用戶(非必需):

CREATE USER 'mytest'@'%' IDENTIFIED BY 'mytest123!@#'; 
grant all privileges on *.* to 'mytest'@'%'identified by 'mytest123!@#' with grant option;
flush privileges;  -- 更新權(quán)限,使之生效

注意:“創(chuàng)建同名用戶” 這一步是非必需的围段,但為了方便讀寫顾翼,建議對 masterslave 數(shù)據(jù)庫訪問采用同樣的一套用戶名密碼。

3.5 重啟 從服務(wù)器(slave)上的 MySQL 服務(wù)

/etc/init.d/mysql restart

3.6 登錄從機(jī) MySQL奈泪,啟用 slave 數(shù)據(jù)同步

登錄 MySQL 后适贸,執(zhí)行如下命令:

start slave;

如果出現(xiàn)錯(cuò)誤:

mysql> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

說明 relay log 即 mysql.slave_relay_log_info 表中保留了以前的主從復(fù)制信息,導(dǎo)致新從庫啟動時(shí)無法找到對應(yīng)文件涝桅,那么我們只需要清理掉該表中的記錄就可以了拜姿。注意,不要手動刪該表數(shù)據(jù)苹支,MySQL 已經(jīng)提供了解決方法,輸入命令:

reset slave;

執(zhí)行成功后误阻,再來執(zhí)行一遍啟動 slave 同步:

start slave;

補(bǔ)充幾個(gè)個(gè)與 slave 相關(guān)的命令:

  1. 停止當(dāng)前在運(yùn)行的 slave
stop slave;
  1. 顯示當(dāng)前 slave 的狀態(tài)
show slave status;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末债蜜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子究反,更是在濱河造成了極大的恐慌寻定,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件精耐,死亡現(xiàn)場離奇詭異狼速,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)卦停,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門向胡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惊完,你說我怎么就攤上這事僵芹。” “怎么了小槐?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵拇派,是天一觀的道長。 經(jīng)常有香客問我,道長件豌,這世上最難降的妖魔是什么疮方? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮茧彤,結(jié)果婚禮上骡显,老公的妹妹穿的比我還像新娘。我一直安慰自己棘街,他們只是感情好蟆盐,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遭殉,像睡著了一般石挂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上险污,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天痹愚,我揣著相機(jī)與錄音,去河邊找鬼蛔糯。 笑死拯腮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚁飒。 我是一名探鬼主播动壤,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼淮逻!你這毒婦竟也來了琼懊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤爬早,失蹤者是張志新(化名)和其女友劉穎哼丈,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筛严,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡醉旦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了桨啃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片车胡。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖照瘾,靈堂內(nèi)的尸體忽然破棺而出吨拍,到底是詐尸還是另有隱情,我是刑警寧澤网杆,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布羹饰,位于F島的核電站伊滋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏队秩。R本人自食惡果不足惜笑旺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望馍资。 院中可真熱鬧筒主,春花似錦、人聲如沸鸟蟹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽建钥。三九已至藤韵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間熊经,已是汗流浹背泽艘。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留镐依,地道東北人匹涮。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像槐壳,于是被迫代替她去往敵國和親然低。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348