溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MYSQL主從搭建的方法教程

發(fā)布時(shí)間:2021-11-11 16:11:34 來(lái)源:億速云 閱讀:220 作者:iii 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章主要介紹“MYSQL主從搭建的方法教程”,在日常操作中,相信很多人在MYSQL主從搭建的方法教程問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”MYSQL主從搭建的方法教程”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

一、MySQL主從復(fù)制搭建

MySQL主從復(fù)制搭建主要步驟有:安裝mysql軟件、Master端配置部署、Slave端配置部署、建立主從同步
安裝操作系統(tǒng)環(huán)境:REDHAT6.5

以下內(nèi)容都是自己在虛擬機(jī)親測(cè)

1、安裝MYSQL

a、環(huán)境準(zhǔn)備及軟件安裝

安裝環(huán)境:

NODE1 主機(jī)名 master      IP地址 192.168.159.128

NODE2 主機(jī)名 slave       IP地址 192.168.159.129

b、安裝MYSQL 主從都要進(jìn)行安裝

#tar zxvf mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz -C /usr/local/

# cd /usr/local/

# mv mysql-5.6.38-linux-glibc2.12-x86_64 mysql

# cd mysql

# groupadd mysql

# useradd -g mysql mysql

# passwd mysql
      # cd /usr/local/

#  chown -R mysql.mysql mysql

# ./script/mysql_install_db --user=mysql
      # cd /usr/local/mysql
      # chown -R root:root ./
      # chown -R mysql:mysql data

# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

# chmod u+x /etc/rc.d/init.d/mysqld

# chkconfig --add mysqld

# /etc/rc.d/init.d/mysqld start

 
在這里是采用的簡(jiǎn)易安裝,如果想要在生產(chǎn)環(huán)境使用,想自己指定需要的參數(shù),建議還是使用源碼安裝


注:主從都使用yum install 的方式安裝系統(tǒng)自帶的mysql也可以使用,親測(cè)搭建成功,只是版本會(huì)比較低

2、Master端配置部署

a、在主服務(wù)器上的my.cnf配置文件中的[mysqld]節(jié)點(diǎn)下添加以下配置

黃色部分為新添加

vi /etc/my.cnf

[mysqld]

server-id=101

log-bin=/var/lib/mysql/mysql-bin.log

log-bin-index=/var/lib/mysql/mysql-bin.index

expire_logs_days=30

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

說(shuō)明:

log-bin :給出二進(jìn)制日志的所有文件基礎(chǔ)名

log-bin-index :給出二進(jìn)制日志文件的文件名,通常以000001開(kāi)始,順序遞增。全名:master-bin.000001

server-id :mysql服務(wù)器唯一ID,在主從復(fù)制的所有服務(wù)器中必須唯一。

b、創(chuàng)建用戶,并賦予權(quán)限:

create user repl_user;

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY PASSWORD '******';

設(shè)置密碼時(shí)會(huì)遇到報(bào)錯(cuò):

ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number

解決辦法:用select password('你想輸入的密碼');查詢出你的密碼對(duì)應(yīng)的字符串

select password('123456');

查出的是*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9

GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';

2、Slave端配置部署

a、配置參數(shù):[mysqld]

黃色部分為新添加

vi /etc/my.cnf

[mysqld]

server-id=102

log-bin=/var/lib/mysql/mysql-relay-bin.log

log-bin-index=/var/lib/mysql/mysql-relay-bin.index

relay_log_purge=on

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is  recommended to prevent assorted security risks

symbolic-links=0

 

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

3、建立主從同步

(重建備庫(kù)使用該方法,備庫(kù)和主庫(kù)是正常數(shù)據(jù)同步狀態(tài))

建立主從同步可以從主庫(kù)上導(dǎo)出數(shù)據(jù),也可以從已有的從庫(kù)上導(dǎo)出數(shù)據(jù),然后再導(dǎo)入到新的從庫(kù)中,change master to建立同步。

3.1 、導(dǎo)出數(shù)據(jù)

在主庫(kù)上導(dǎo)出數(shù)據(jù):

mysqldump -u***-p***-S /data/mysql6001/mysql.sock        --default-character-set=utf8 –q --single-transaction --master-data-A >  /tmp/all_database.sql

(重建備庫(kù)時(shí))也可在從庫(kù)上導(dǎo)出數(shù)據(jù):(我這里是測(cè)試環(huán)境,所以對(duì)于我來(lái)說(shuō)都是新建的數(shù)據(jù)庫(kù),所以無(wú)所謂啦)

mysqldump -u***-p***-S /data/mysql6001/mysql.sock --default-character-set=utf8 -q --single-transaction --dump-slave-A  >  /tmp/all_database.sql

NOTES

--master-data和--dump-slave導(dǎo)出的備份中,會(huì)包含master_log_file和master_log_pos信息。

--master-data選項(xiàng)的作用,是將二進(jìn)制的信息寫(xiě)入到輸出文件中,在這里是寫(xiě)入到備份的sql文件中。

--dump-slave選項(xiàng)的作用,是用戶在slave端dump數(shù)據(jù),建立新的slave,至少是第2個(gè)slave,也就是已經(jīng)有A-->B,現(xiàn)在從B上導(dǎo)出數(shù)據(jù)建立A-->C的復(fù)制,這個(gè)不但可以用于建立slave,還可用于備份中,用于讀binlog進(jìn)行roll forward的起點(diǎn)

例子:(實(shí)際直接主庫(kù)全庫(kù)導(dǎo)出即可)

mysqldump -uroot --events --all-databases > /opt/mysql.dump

3.2、從庫(kù)導(dǎo)入數(shù)據(jù)

mysql -u*** -p*** --default-character-set=utf8< all_database.sql

例子:

mysql -uroot <mysql.dump </mysql.dump

3.3、從庫(kù)與主機(jī)建立同步

以下為建立主從同步最基本的6個(gè)項(xiàng):change master to

master_host='xxx.xxx.xxx.xxx',    # 主庫(kù)IP

master_port=6001,              # 主庫(kù)mysqld的端口

master_user='repl',             # 主庫(kù)中創(chuàng)建的有REPLICATION SLAVE權(quán)限的用戶

master_password='xxxxxxxx',      # 該用戶的密碼

master_log_file='mysql-bin.000xxx',  # 已在導(dǎo)入時(shí)指定了

master_log_pos=xxxxxx;       #已在導(dǎo)入時(shí)指定了

start slave;

 

例子:

master_log_file和master_log_pos通過(guò)在主庫(kù)上使用命令獲得:

show master status \G;

在從庫(kù)上執(zhí)行:

change master  to

master_host='192.168.159.128',

master_port=3306,

master_user='repl_user',

master_password='123456',

master_log_file='mysql-bin.000001',

master_log_pos=1071;

start  slave;

 

二、主從復(fù)制狀態(tài)檢查及異常處理

1、MYSQL啟動(dòng)報(bào)錯(cuò)

(1)MYSQL啟動(dòng)時(shí)報(bào)錯(cuò):

Another MySQL daemon already running with the same unix socket

原因多個(gè)Mysql進(jìn)程使用了同一個(gè)socket。

兩個(gè)方法解決:

第一個(gè)是立即關(guān)機(jī) 使用命令 shutdown -h now 關(guān)機(jī),關(guān)機(jī)后在啟動(dòng),進(jìn)程就停止了。

第二個(gè)直接把mysql.sock文件改名即可。也可以刪除,推薦改名。

然后就可以啟動(dòng)mysql了。

(2)在REDHAT7.0版本安裝MYSQL5.6.38時(shí)遇到以下啟動(dòng)報(bào)錯(cuò)
service mysql start
Starting MySQL.180424 22:21:31 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/REDHAT70.pid).


解決方法:
mkdir -p /var/log/mariadb/
cd /var/log/mariadb/
touch mariadb.log
chmod -R 775 mariadb.log
chown -R mysql:mysql mariadb.log

2、ERROR-2013報(bào)錯(cuò)

ERROR-2013報(bào)錯(cuò)代碼,可能造成的原因是

[ERROR] Slave I/O: error connecting to master 'repl_user@192.168.159.128:3306' - retry-time: 60  retries: 86400, Error_code: 2013

iptables -F

setenforce 0

3、ERROR-1045報(bào)錯(cuò)

Last_IO_Errno: 1045

Last_IO_Error: error connecting to master 'repl_user@192.168.159.128:3306' - retry-time: 60  retries: 86400

必須使用以下方法授權(quán)

select password('123456');

GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';4、登陸MYSQL報(bào)錯(cuò)ERROR-2002

登陸MYSQL時(shí)如果報(bào)錯(cuò):

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'

 解決方法:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

到此,關(guān)于“MYSQL主從搭建的方法教程”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI