溫馨提示×

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

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

MySQL實(shí)現(xiàn)主從復(fù)制與讀寫分離的具體步驟

發(fā)布時(shí)間:2020-05-23 15:50:10 來源:網(wǎng)絡(luò) 閱讀:267 作者:三月 欄目:MySQL數(shù)據(jù)庫

下面一起來了解下MySQL實(shí)現(xiàn)主從復(fù)制與讀寫分離的具體步驟,相信大家看完肯定會(huì)受益匪淺,文字在精不在多,希望MySQL實(shí)現(xiàn)主從復(fù)制與讀寫分離的具體步驟這篇短內(nèi)容是你想要的。

環(huán)境介紹:

云服務(wù)器(master):192.168.100.155

從云服務(wù)器(slave1,slave2):192.168.100.153-154

代理云服務(wù)器(amoeba):192.168.100.156

應(yīng)用客戶端(app):192.168.100.157


1.搭建時(shí)間云服務(wù)器:

主節(jié)點(diǎn)上安裝ntp時(shí)間服務(wù):192.168.100.155

yum -y install ntp

sed -i '/^server/s/^/#/g' /etc/ntp.conf 

cat <<END >>/etc/ntp.conf

server 127.127.1.0

fudge 127.127.1.0 stratum 8

END

/etc/init.d/ntpd restart

netstat -utpln |grep ntp

從節(jié)點(diǎn)同步時(shí)間:192.168.100.153-154

yum -y install ntpdate

/usr/sbin/ntpdate 192.168.100.155


2.安裝mysql:192.168.100.153-155

wget ftp://192.168.100.100/tools/lamp_install_publis-app-2015-07-16.tar.xz

tar Jxvf lamp_install_publis-app-2015-07-16.tar.xz

mysql_install.sh   

mysql_config.sh

reboot



提示:

[root@localhost ~]# cd bin/

[root@localhost bin]# cat mysql_install.sh 

#!/bin/bash

##第一配置yum,安裝ncurses依賴包

yum -y install ncurses-*

#解壓cmake,安裝基礎(chǔ)環(huán)境

tar zxvf /root/cmake-2.8.6.tar.gz -C /usr/src/

cd /usr/src/cmake-2.8.6

#配置,編譯安裝cmake

./configure &&gmake &&gmake install

##解壓mysql

tar zxvf /root/mysql-5.5.22.tar.gz -C /usr/src/

cd /usr/src/mysql-5.5.22/

#cmake進(jìn)行配置mysql

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql   #指定安裝目錄\

-DDEFAULT_CHARSET=utf8   #指定字符集為utf8 \

-DDEFAULT_COLLATION=utf8_general_ci   ##指定字符校驗(yàn) \

-DWITH_EXTRA_CHARSETS=all   ##支持額外字符集\

-DSYSCONFDIR=/etc/  ##指定配置文件位置

make &&make install   #編譯安裝

if [ -e /usr/local/mysql ];then

echo "mysql install successfully."

fi

[root@localhost bin]#

[root@localhost bin]# cat mysql_config.sh 

#!/bin/bash

#1.復(fù)制配置文件

cp /usr/src/mysql-5.5.22/support-files/my-medium.cnf /etc/my.cnf

#2.添加系統(tǒng)服務(wù)

cp /usr/src/mysql-5.5.22/support-files/mysql.server /etc/init.d/mysqld

chmod +x /etc/init.d/mysqld

chkconfig --add mysqld

chkconfig mysqld  on

#3.優(yōu)化PATH路徑,執(zhí)行命令時(shí)方便,單引號(hào)雙引號(hào)都行

grep mysql /etc/profile

if [ $? -eq 0 ];then

echo "PATH is set."

else

echo "export PATH=$PATH:/usr/local/mysql/bin"  >>/etc/profile

source /etc/profile  ##執(zhí)行文件

fi

#4.初始化mysql,創(chuàng)建用戶,賦權(quán)

useradd -M -s /sbin/nologin mysql

chown -R mysql:mysql /usr/local/mysql

/usr/local/mysql/scripts/mysql_install_db  \

--basedir=/usr/local/mysql \

--datadir=/usr/local/mysql/data --user=mysql

#5.啟動(dòng)mysql,并設(shè)置為開機(jī)啟動(dòng)

if [ -e /tmp/mysql.sock ];then

/etc/init.d/mysqld restart

else

/etc/init.d/mysqld start

fi

chkconfig mysqld on

#6.修改密碼,并提示密碼

mysqladmin -u root password '123123'  &&echo "mysql root password is 123123"


3.配置MySQL主從復(fù)制:

1)主云服務(wù)器配置:192.168.100.155

sed -i 's/^log-bin=.*/log-bin=master-bin\nlog-slave-updates=ture/g' /etc/my.cnf

sed -i '/^server-id/s/1/11/g' /etc/my.cnf 

/etc/init.d/mysqld restart

mysql -uroot -p123123

mysql> grant replication slave on *.* to 'myslave'@'192.168.100.%' identified by '123123';

mysql> flush privileges;

mysql> show master status;  ##記住File的及Position的值,此處為master-bin.000001和337

mysql> create database db_test;  ##創(chuàng)建測試數(shù)據(jù)庫

mysql> quit

2)配置從云服務(wù)器1:192.168.100.153

sed -i '/^server-id/s/1/22/g' /etc/my.cnf

sed -i '/^server-id/arelay-log=relay-log-bin\nrelay-log-index=slave-relay-bin.index' /etc/my.cnf

/etc/init.d/mysqld restart

mysql -uroot -p123123

mysql> change master to master_host='192.168.100.155',master_user='myslave',master_password='123123',master_log_file='master-bin.000001',master_log_pos=337;

mysql> start slave;

mysql> show slave status\G;  ##查看無error即可

mysql> show databases;  ##驗(yàn)證數(shù)據(jù)庫是否同步

mysql> quit

3)配置從云服務(wù)器2:192.168.100.154

sed -i '/^server-id/s/1/33/g' /etc/my.cnf

sed -i '/^server-id/arelay-log=relay-log-bin\nrelay-log-index=slave-relay-bin.index' /etc/my.cnf

/etc/init.d/mysqld restart

mysql -uroot -p123123

mysql> change master to master_host='192.168.100.155',master_user='myslave',master_password='123123',master_log_file='master-bin.000001',master_log_pos=337;

mysql> start slave;

mysql> show slave status\G;  ##查看無error即可

mysql> show databases;  ##驗(yàn)證數(shù)據(jù)庫是否同步

mysql> quit


4.搭建MySQL讀寫分離:

1)安裝軟件:192.168.100.156

lftp 192.168.100.100

>cd tools/

>get amoeba-mysql-binary-2.2.0.tar.gz jdk-6u14-linux-x64.bin

>bye

yum -y remove java

chmod +x jdk-6u14-linux-x64.bin 

./jdk-6u14-linux-x64.bin 

mv jdk1.6.0_14/ /usr/local/jdk1.6

vi  /etc/profile

export JAVA_HOME=/usr/local/jdk1.6

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin

export AMOEBA_HOME=/usr/local/amoeba

export PATH=$PATH:$AMOEBA_HOME

:wq

source /etc/profile

java -version

mkdir /usr/local/amoeba

tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

chmod -R 755 /usr/local/amoeba/

/usr/local/amoeba/bin/amoeba  ##驗(yàn)證

2)數(shù)據(jù)授權(quán)給amoeba讀寫權(quán)限:

mysql> grant all on *.* to linuxyy@'192.168.100.%' identified by '123123';   ##在192.168.100.155上完成

mysql> show grants for linuxyy@'192.168.100.%';   ##在192.168.100.153-154上查看是否同步了權(quán)限

3)修改配置文件:192.168.100.156

vim /usr/local/amoeba/conf/amoeba.xml

 30                                         <property name="user">amoeba</property>

 31 

 32                                         <property name="password">123456</property>

115                 <property name="defaultPool">master</property>

116 

117                 <property name="writePool">master</property>   ##注意刪除<!--  -->的注釋

118                 <property name="readPool">slaves</property>

:set nu  ##顯示行號(hào)

:wq


vim /usr/local/amoeba/conf/dbServers.xml

 25                         <!-- mysql user -->

 26                         <property name="user">linuxyy</property>   ##該用戶必須是上一步授權(quán)的用戶

 27                         

 28                         <!--  mysql password -->   ##修改

 29                         <property name="password">123123</property>  ##刪除下一行的“-->”

 44         <dbServer name="master"  parent="abstractServer">   ##修改為master

 45                 <factoryConfig>

 46                         <!-- mysql ip -->

 47                         <property name="ipAddress">192.168.100.155</property>  ##指定正確的master的ip

 51         <dbServer name="slave1"  parent="abstractServer">  ##修改為slave1

 52                 <factoryConfig>

 53                         <!-- mysql ip -->

 54                         <property name="ipAddress">192.168.100.153</property>  ##指定slave1的ip地址

 55                 </factoryConfig>

 56         </dbServer>

 57         <dbServer name="slave2"  parent="abstractServer">  ##添加如下6行,指定slave2的ip

 58                 <factoryConfig>

 59                         <!-- mysql ip -->

 60                         <property name="ipAddress">192.168.100.154</property>

 61                 </factoryConfig>

 62         </dbServer>

 64         <dbServer name="slaves" virtual="true">  ##修改為slaves

 70                         <property name="poolNames">slave1,slave2</property>  ##修改集群的成員名稱用逗號(hào)隔開

:wq

/usr/local/amoeba/bin/amoeba start&   ##啟動(dòng)代理服務(wù)

netstat -utpln |grep 8066  ##驗(yàn)證



5.測試讀寫分離

1)驗(yàn)證主從復(fù)制:192.168.100.157

yum -y install mysql

mysql -uamoeba -p123456 -h 192.168.100.156 -P 8066   ##登錄db集群192.168.100.157

mysql>show databases;

mysql> use db_test;

mysql> create table linuxyy(id int(10),name varchar(10),address varchar(20));

在192.168.100.153-155上查看結(jié)果:

mysql -uroot -p123123 

mysql> use db_test;

mysql> show tables;   ##已然同步


2)關(guān)閉slave1,slave2的復(fù)制功能:192.168.100.153-154

mysql> stop slave;


3)分別在master,slave1,slave2上創(chuàng)建不同的數(shù)據(jù):

master:

mysql> insert into linuxyy values(1,'hehe','this is master');

slave1:

mysql> insert into linuxyy values(2,'hehe','this is slave1');

slave2:

mysql> insert into linuxyy values(3,'hehe','this is slave2');


4)應(yīng)用客戶端驗(yàn)證讀:192.168.100.157

mysql> select * from linuxyy;  ##第一次查詢

+------+------+----------------+

| id   | name | address        |

+------+------+----------------+

|    2 | hehe | this is slave1 |

+------+------+----------------+

1 row in set (0.02 sec)


mysql> select * from linuxyy;   ##第二次查詢

+------+------+----------------+

| id   | name | address        |

+------+------+----------------+

|    3 | hehe | this is slave2 |

+------+------+----------------+

1 row in set (0.01 sec)

mysql> select * from linuxyy;   ##第三次查詢

+------+------+----------------+

| id   | name | address        |

+------+------+----------------+

|    2 | hehe | this is slave1 |

+------+------+----------------+

1 row in set (0.00 sec)


5)應(yīng)用客戶端上驗(yàn)證寫:

mysql> insert into linuxyy values(4,'hehe','app write test');  ##寫入數(shù)據(jù)

Query OK, 1 row affected (0.02 sec)


mysql> select * from linuxyy;   ##查不到剛寫入的數(shù)據(jù)

+------+------+----------------+

| id   | name | address        |

+------+------+----------------+

|    3 | hehe | this is slave2 |

+------+------+----------------+

1 row in set (0.01 sec)


master上驗(yàn)證:

mysql> select * from linuxyy;   ##查到數(shù)據(jù)

+------+------+----------------+

| id   | name | address        |

+------+------+----------------+

|    1 | hehe | this is master |

|    4 | hehe | app write test |

+------+------+----------------+

2 rows in set (0.00 sec)


總結(jié):

app寫入數(shù)據(jù)時(shí),amoeba會(huì)將數(shù)據(jù)路由到master上進(jìn)行存儲(chǔ),app讀取數(shù)據(jù)時(shí),amoeba會(huì)將讀的請(qǐng)求一輪詢的方式發(fā)給slaves組(slave1+slave2),實(shí)現(xiàn)讀寫分離。

master和slaves間配置了主從復(fù)制,保證了數(shù)據(jù)的一致性。

看完MySQL實(shí)現(xiàn)主從復(fù)制與讀寫分離的具體步驟這篇文章后,很多讀者朋友肯定會(huì)想要了解更多的相關(guān)內(nèi)容,如需獲取更多的行業(yè)信息,可以關(guān)注我們的行業(yè)資訊欄目。

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

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

AI