主:192.168.122.11
從:192.168.122.22
代理:192.168.122.33
主和從上分別
是遠(yuǎn)程連接昭齐,要授予遠(yuǎn)程連接的權(quán)限
mysql> create database db;
mysql> use db;
mysql> create table test(id int);
mysql> insert into test values(1),(2);
mysql> select * from test;
mysql> grant all on db_1.* to proxy@'%' identified by '123';
代理服務(wù)器上要測(cè)試
[root@node3 ~]# /usr/local/mysql/bin/mysql -h 192.168.122.11 -u proxy -p123
[root@node3 ~]# /usr/local/mysql/bin/mysql -h 192.168.122.22 -u proxy -p123
[root@node3 tmp]# tar xf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@node3 tmp]# mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
[root@node3 tmp]# cd /usr/local/mysql-proxy/share/doc/mysql-proxy/
[root@proxy mysql-proxy]# vim rw-splitting.lua 更改鏈接數(shù),分離
[root@node3 mysql-proxy]# cd /usr/local/mysql-proxy/bin/
[root@localhost bin]# killall mysqld
[root@localhost bin]# killall mysqld
[root@node3 bin]# ./mysql-proxy -P 192.168.122.33:3306 -r 192.168.122.22:3306 -b 192.168.122.11:3306 -s /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --daemon --user=nobody --log-level=debug --log-use-syslog
[root@node3 mysql-proxy]# cd /usr/local/mysql-proxy/bin/
[root@node3 bin]# ./mysql-proxy --help
[root@node3 bin]# ./mysql-proxy --proxy-address=192.168.122.33:3306 --proxy-read-only-backend-addresses=192.168.122.22:3306 --proxy-backend-addresses=192.168.122.11:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --daemon --user=nobody --log-level=debug --log-use-syslog
==========================================================================================================================================
使用代理軟件
mysql-proxy實(shí)現(xiàn)mysql的讀寫(xiě)分離
實(shí)驗(yàn):
192.168.1.14
客戶端請(qǐng)求mysql-proxy,判斷是寫(xiě)還是讀
建立兩次連接
是遠(yuǎn)程連接舔亭,要授予遠(yuǎn)程連接的權(quán)限
use db;
create table test (id int);
insert into test values (10),(100);
grant all on db.* to proxy@'%' identified by '123';
192.168.1.140
在打開(kāi)一個(gè)終端設(shè)置從服務(wù)器
和主服務(wù)器一樣悲没,只是值不一樣
mysql
create database dn;
use db
create table test (id int);
insert into test values (10),(200);
grant all on db.* to proxy@'%' identified by '123'; 密碼和主服務(wù)器必須一樣
指定一個(gè)代理服務(wù)器;192.168.1.15
測(cè)試
mysql -h 192.168.1.140 -u proxy -p123
mysql -h 192.168.1.14 -u proxy -p123
使用lva的腳本語(yǔ)言料滥,把lva的解釋起和lvadevell裝上淳梦,day4里面有mysql-proxy
把兩個(gè)包裝上 rpm
mysql-proxy-0.8.0.........
rpm -ivh lua-5.0.2-1.el5.rf.i386.rpm
rpm -ivh lua-devel-5.0.2-1.el5.rf.i386.rpm
tar zxvf mysql-proxy-0.8.0-linux-rhel5-x86-32bit.tar.gz -C /usr/local/src
cp -r mysql-proxy-0.8.0-linux-rhel5-x86-32bit /usr/local/mysql-proxy
cd /usr/local/mysql-proxy/share/doc/mysql-proxy
vim rw-splitting.lua
36 if not proxy.global.config.rwsplit then
37 proxy.global.config.rwsplit = {
38 min_idle_connections = 1, 最小空閑線程連接
39 max_idle_connections = 1, 最大線程連接,基本沒(méi)用
mysqlproxy的啟動(dòng)方法
cd bin
./mysql-proxy --help-proxy 查看幫助
mysql-proxy --proxy-read-only-backend-addresses=192.168.0.5:3306 --proxy-backend-addresses=192.168.0.3:3306 --proxy-lua-script=/usr/share/doc/mysql-prox[root@node3 bin]# ./mysql-proxy --proxy-address=192.168.122.33:3306 --proxy-read-only-backend-addresses=192.168.122.22:3306 --proxy-backend-addresses=192.168.122.11:3306 --proxy-lua-script=/usr/share/doc/mysql-proxy/rw-splitting.lua --daemon --user=nobody --log-level=debug --log-use-syslog
y/rw-splitting.lua --daemon --user=nobody --log-level=debug --log-use-syslog
-P 決定mysql用那個(gè)接口進(jìn)行連接砂竖,指定mysql-proxy工作的時(shí)候允許訪問(wèn)的IP和接口 模擬成mysql真椿,端口用3306,要保證自己本地的mysql不要運(yùn)行乎澄,打開(kāi)后端口沖突突硝,mysql-proxy運(yùn)行不起來(lái)
-r 只讀的后端服務(wù)器 192.168.1.140
-b 讀寫(xiě)的后端服務(wù)器 192.168.1.14
-s 工作的時(shí)候指定腳本的位置和名稱,默認(rèn)是沒(méi)有的
版本小于5.1.12置济,會(huì)出現(xiàn)bug解恰,要加上-bug
--deamon 以一個(gè)服務(wù)的形式去啟動(dòng)
什么算服務(wù):被定義為服務(wù)的進(jìn)程是沒(méi)有終端的,不依賴于用戶的終端浙于。終端關(guān)掉护盈,服務(wù)還是可以正常運(yùn)行的
運(yùn)行mysql-proxy
./mysql-proxy -P 192.168.1.15:3306 -b 192.168.1.14:3306 -r 192.168.1.140:3306 -s /usr/local/mysqlproxy/shaer/doc/mysql-proxy/rw-splitting.lua --daemon &
改變:#ulimit -n 10240 臨時(shí)改變,永久改變羞酗,要改PAM
(ulimit -n 1
cat /etc/passwd /etc/shadow
會(huì)出錯(cuò))
測(cè)試:
模擬客戶端腐宋,利用mysql命令往mysql-proxy發(fā)起連接
mysql -h 192.168.1.15 -u proxy -p123
use db;
select * from test;
另一個(gè)標(biāo)簽
mysql -h 192.168.1.15 -u proxy -p123
use db;
select * from test;
可以增大連接數(shù)目
update test set id=300; 改變數(shù)據(jù)
然后可以把140 14 搭建成主從的模式
錯(cuò)誤
1.iptables 防火墻 selinux
2.啟動(dòng)腳本 參數(shù)錯(cuò)誤
3.用戶錯(cuò)誤
4.proxy啟動(dòng)mysql服務(wù)
mysql-cluster
1、準(zhǔn)備5臺(tái)服務(wù)器檀轨,為五臺(tái)機(jī)器分別安裝Linux操作系統(tǒng)(RHEL 6.5 x86_64bit)胸竞,并分配IP地址
Management Node 1.1.1.6 (負(fù)責(zé)管理整個(gè)集群)
SQL Node 1.1.1.7 (負(fù)責(zé)操作數(shù)據(jù)庫(kù))
SQL Node 1.1.1.8 (負(fù)責(zé)操作數(shù)據(jù)庫(kù))
Data Node 1.1.1.9 (負(fù)責(zé)存儲(chǔ)數(shù)據(jù))
Data Node 1.1.1.10 (負(fù)責(zé)存儲(chǔ)數(shù)據(jù))
(SQL節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)可以同在一臺(tái)機(jī)器上)
2、修改5臺(tái)服務(wù)器的/etc/hosts文件参萄,修改完后的內(nèi)容如下:
1.1.1.6 node1.manager.com
1.1.1.7 node2.sql1.com
1.1.1.8 node3.sql2.com
1.1.1.9 node4.data1.com
1.1.1.10 node5.data2.com
3.分別在5臺(tái)服務(wù)器上解壓 mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz
[root@node5 ~]# cd /tmp
[root@node5 tmp]# tar xf mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz
[root@node5 tmp]# mv mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64 /usr/local/mysql-cluster
[root@node5 tmp]# chown -R mysql.mysql /usr/local/mysql-cluster
注意:管理節(jié)點(diǎn)只需要建立/usr/local/mysql-cluster/目錄
將ndb_mgm ndb_mgmd兩個(gè)可執(zhí)行程序拷貝到/usr/local/mysql-cluster/下(從任意節(jié)點(diǎn)拷貝)
4.管理節(jié)點(diǎn)的配置
vim /usr/local/mysql-cluster/config.ini
[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
[ndb_mgmd]
hostname=1.1.1.6
datadir=/usr/local/mysql-cluster
[ndbd]
hostname=1.1.1.9
datadir=/usr/local/mysql-cluster/data
[ndbd]
hostname=1.1.1.10
datadir=/usr/local/mysql-cluster/data
[mysqld]
hostname=1.1.1.7
[mysqld]
hostname=1.1.1.8
啟動(dòng)管理節(jié)點(diǎn)
/usr/local/mysql-cluster/bin/ndb_mgmd -f /usr/local/mysql-cluster/config.ini --initial
(第一次啟動(dòng)時(shí)這樣執(zhí)行卫枝,如果后面新添加了數(shù)據(jù)節(jié)點(diǎn)。執(zhí)行此命令時(shí)讹挎,需要帶上--initital參數(shù)校赤,否則新添加的節(jié)點(diǎn)吆玖,無(wú)法被識(shí)別)
[root@node5 mysql-cluster]# ./ndb_mgm (查看啟動(dòng)后的集群狀態(tài),看看集群是否成功啟動(dòng)马篮,如果看到以下內(nèi)容沾乘,表示集群已經(jīng)成功配置并啟動(dòng))
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
[ndbd(NDB)] 2 node(s)
id=2 @1.1.1.9 (mysql-5.6.21 ndb-7.3.7, Nodegroup: 0, *)
id=3 @1.1.1.10 (mysql-5.6.21 ndb-7.3.7, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @1.1.1.6 (mysql-5.6.21 ndb-7.3.7)
[mysqld(API)] 2 node(s)
id=4 @1.1.1.7 (mysql-5.6.21 ndb-7.3.7)
id=5 @1.1.1.8 (mysql-5.6.21 ndb-7.3.7)
5.數(shù)據(jù)節(jié)點(diǎn)(注意實(shí)驗(yàn)環(huán)境內(nèi)存盡量設(shè)置大于1G)
[root@node3 mysql-cluster]# vim /etc/my.cnf
[mysqld]
ndbcluster
[mysql_cluster]
ndb-connectstring=1.1.1.6
啟動(dòng)
/usr/local/mysql-cluster/bin/ndbd
6.SQL節(jié)點(diǎn)
vim /etc/my.cnf
[mysqld]
ndbcluster
[mysql_cluster]
ndb-connectstring=1.1.1.6
初始化(只SQL需要做)
cd /usr/local/mysql-cluster/
./scripts/mysql_install_db --user=mysql
啟動(dòng)sql節(jié)點(diǎn)(殺死其他mysql進(jìn)程)
./bin/mysqld_safe --user=mysql &
測(cè)試
1.測(cè)試數(shù)據(jù)同步讀取
create database king;
create table test(id int) engine=ndbcluster;
insert into test values(1);
select * from test;
2.測(cè)試數(shù)據(jù)節(jié)點(diǎn)失敗
3.測(cè)試SQL節(jié)點(diǎn)失敗
MySQL 5.1 AB 復(fù)制
ab復(fù)制(主從復(fù)制)
可以讓mysql實(shí)現(xiàn):
1.數(shù)據(jù)的備份(主服務(wù)器的數(shù)據(jù)全部同步到從服務(wù)器)
2.可以負(fù)載均衡減小主服務(wù)器的壓力
3.真正實(shí)現(xiàn)mysql的讀寫(xiě)分離
配置方法
主服務(wù)器:
1.cat /etc/my.cnf
[mysqld]
log-bin=mysql_bin
server-id=1 不允許重復(fù)
2.grant replication slave on . to ‘slave‘@‘192.168.1.140‘ identified by '123';授權(quán),指定從服務(wù)器只能復(fù)制binlog积蔚,從服務(wù)器的ip
mysql>show master status查看主服務(wù)器的運(yùn)行狀態(tài)
在從上使用slave用戶登錄測(cè)試:
3.mysql -u slave -p123 -h 192.168.1.14
4.mysqldump --all-database > db_backup.sql (主服務(wù)執(zhí)行全備)
5.mysql> show master status;找到當(dāng)前的日志文件和位置號(hào)
從:(可以不用開(kāi)啟binlog功能)
6.mysql -uroot -p123 < db_backup.sql 將主服務(wù)的全備腳本拷貝到主服務(wù)器并且導(dǎo)入主服務(wù)器
7.cat /etc/my.cnf
[mysqld]
server-id=2 和主服務(wù)器不重復(fù)就可以
master-host=192.168.1.131 主服務(wù)器ip
master-user=slave 登錄時(shí)賬號(hào)
master-password=123 mysql讀取配置文件時(shí)意鲸,知道是以從服務(wù)器的形式運(yùn)行
8.從服務(wù)器從主服務(wù)器讀取binlog產(chǎn)生問(wèn)題時(shí)
mysql -u root -p
mysql> change master to
mysql> master_host='192.168.1.131',
mysql> master_user='slave',
mysql> master_password='123',
mysql> master_log_file='',
mysql> master_log_pos=399;
9.啟動(dòng)從服務(wù)器
mysql> slave start 或者是start slave烦周,啟動(dòng)從服務(wù)器
mysql>show slave status 查看從服務(wù)器狀態(tài)
練習(xí):
主----從(主)------從
log-slave-updates 中間這臺(tái)作用:中繼日志內(nèi)容寫(xiě)入到binlog日志
互主
[mysqld]
log-bin=mysql_bin
server-id=1
master-host=192.168.100.130
master-user=slave2
master-password=123
auto-increment-increment=2
auto-increment-offset=1
[mysqld]
log-bin=slave
server-id=2
master-host=192.168.100.128
master-user=slave
master-password=123
auto-increment-increment=2
auto-increment-offset=2
主服務(wù)器
A ip 172.16.10.1
1.A全備份
mysqldump -u root -S /var/lib/mysql/mysql.sock --all-databases >> /tmp/all.sql
2.開(kāi)啟binlog日志
vim /etc/my.cnf
[mysqld]
log-bin=master
log-bin-index=master
server-id=1
service mysqld restart
3.授權(quán)B服務(wù)器 可以傳輸binlog日志
grant replication slave on . to slave@'172.16.10.2' identified by '123';
從服務(wù)器
B ip 172.16.10.2
1.測(cè)試slave是否能正常鏈接
mysql -u slave -p123 -h 172.16.10.1
2.拷貝A服務(wù)器的全備,并且恢復(fù)
scp 172.16.10.1:/backup/all.sql ./
mysql -u root < /root/all.sql
3.配置A服務(wù)器連接地址及用戶信息
vim /etc/my.cnf
[mysqld]
server-id=2
master-user=slave
master-password=123
master-host=172.16.10.1
測(cè)試
A服務(wù)器
mysql> show master status\G
B服務(wù)器
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
A服務(wù)器做出數(shù)據(jù)改動(dòng) 查看從服務(wù)器是否有同步的變化