mysql读写分离 集群

主:192.168.122.11
从:192.168.122.22
代理:192.168.122.33

主和从上分别
是远程连接,要授予远程连接的权限
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';

代理服务器上要测试
[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 更改链接数,分离
[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实现mysql的读写分离
实验:
192.168.1.14
客户端请求mysql-proxy,判断是写还是读
建立两次连接
是远程连接,要授予远程连接的权限

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
在打开一个终端设置从服务器
和主服务器一样,只是值不一样
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'; 密码和主服务器必须一样

指定一个代理服务器;192.168.1.15
测试
mysql -h 192.168.1.140 -u proxy -p123
mysql -h 192.168.1.14 -u proxy -p123
使用lva的脚本语言,把lva的解释起和lvadevell装上,day4里面有mysql-proxy
把两个包装上 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, 最大线程连接,基本没用

mysqlproxy的启动方法
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用那个接口进行连接,指定mysql-proxy工作的时候允许访问的IP和接口 模拟成mysql,端口用3306,要保证自己本地的mysql不要运行,打开后端口冲突,mysql-proxy运行不起来
-r 只读的后端服务器 192.168.1.140
-b 读写的后端服务器 192.168.1.14
-s 工作的时候指定脚本的位置和名称,默认是没有的
版本小于5.1.12,会出现bug,要加上-bug
--deamon 以一个服务的形式去启动
什么算服务:被定义为服务的进程是没有终端的,不依赖于用户的终端。终端关掉,服务还是可以正常运行的

运行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 临时改变,永久改变,要改PAM
(ulimit -n 1
cat /etc/passwd /etc/shadow
会出错)

测试:
模拟客户端,利用mysql命令往mysql-proxy发起连接
mysql -h 192.168.1.15 -u proxy -p123

use db;
select * from test;

另一个标签
mysql -h 192.168.1.15 -u proxy -p123

use db;
select * from test;

可以增大连接数目

update test set id=300; 改变数据

然后可以把140 14 搭建成主从的模式

错误
1.iptables 防火墙 selinux
2.启动脚本 参数错误
3.用户错误
4.proxy启动mysql服务


mysql-cluster

1、准备5台服务器,为五台机器分别安装Linux操作系统(RHEL 6.5 x86_64bit),并分配IP地址

Management Node 1.1.1.6 (负责管理整个集群)
SQL Node 1.1.1.7 (负责操作数据库)
SQL Node 1.1.1.8 (负责操作数据库)
Data Node 1.1.1.9 (负责存储数据)
Data Node 1.1.1.10 (负责存储数据)

(SQL节点和数据节点可以同在一台机器上)

2、修改5台服务器的/etc/hosts文件,修改完后的内容如下:

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台服务器上解压 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

注意:管理节点只需要建立/usr/local/mysql-cluster/目录
将ndb_mgm ndb_mgmd两个可执行程序拷贝到/usr/local/mysql-cluster/下(从任意节点拷贝)

4.管理节点的配置
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

启动管理节点
/usr/local/mysql-cluster/bin/ndb_mgmd -f /usr/local/mysql-cluster/config.ini --initial
(第一次启动时这样执行,如果后面新添加了数据节点。执行此命令时,需要带上--initital参数,否则新添加的节点,无法被识别)

[root@node5 mysql-cluster]# ./ndb_mgm (查看启动后的集群状态,看看集群是否成功启动,如果看到以下内容,表示集群已经成功配置并启动)
-- 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.数据节点(注意实验环境内存尽量设置大于1G)
[root@node3 mysql-cluster]# vim /etc/my.cnf
[mysqld]
ndbcluster

[mysql_cluster]
ndb-connectstring=1.1.1.6

启动
/usr/local/mysql-cluster/bin/ndbd

6.SQL节点
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

启动sql节点(杀死其他mysql进程)
./bin/mysqld_safe --user=mysql &

测试
1.测试数据同步读取
create database king;
create table test(id int) engine=ndbcluster;
insert into test values(1);
select * from test;

2.测试数据节点失败

3.测试SQL节点失败


MySQL 5.1 AB 复制

ab复制(主从复制)
可以让mysql实现:
1.数据的备份(主服务器的数据全部同步到从服务器)
2.可以负载均衡减小主服务器的压力
3.真正实现mysql的读写分离

配置方法
主服务器:
1.cat /etc/my.cnf
[mysqld]
log-bin=mysql_bin
server-id=1 不允许重复
2.grant replication slave on . to ‘slave‘@‘192.168.1.140‘ identified by '123';授权,指定从服务器只能复制binlog,从服务器的ip
mysql>show master status查看主服务器的运行状态

在从上使用slave用户登录测试:
3.mysql -u slave -p123 -h 192.168.1.14
4.mysqldump --all-database > db_backup.sql (主服务执行全备)
5.mysql> show master status;找到当前的日志文件和位置号

从:(可以不用开启binlog功能)
6.mysql -uroot -p123 < db_backup.sql 将主服务的全备脚本拷贝到主服务器并且导入主服务器
7.cat /etc/my.cnf
[mysqld]
server-id=2 和主服务器不重复就可以
master-host=192.168.1.131 主服务器ip
master-user=slave 登录时账号
master-password=123 mysql读取配置文件时,知道是以从服务器的形式运行

8.从服务器从主服务器读取binlog产生问题时
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.启动从服务器
mysql> slave start 或者是start slave,启动从服务器
mysql>show slave status 查看从服务器状态

练习:
主----从(主)------从
log-slave-updates 中间这台作用:中继日志内容写入到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

主服务器
A ip 172.16.10.1
1.A全备份
mysqldump -u root -S /var/lib/mysql/mysql.sock --all-databases >> /tmp/all.sql
2.开启binlog日志
vim /etc/my.cnf
[mysqld]
log-bin=master
log-bin-index=master
server-id=1

service mysqld restart

3.授权B服务器 可以传输binlog日志
grant replication slave on . to slave@'172.16.10.2' identified by '123';

从服务器
B ip 172.16.10.2
1.测试slave是否能正常链接
mysql -u slave -p123 -h 172.16.10.1

2.拷贝A服务器的全备,并且恢复
scp 172.16.10.1:/backup/all.sql ./
mysql -u root < /root/all.sql

3.配置A服务器连接地址及用户信息
vim /etc/my.cnf
[mysqld]
server-id=2
master-user=slave
master-password=123
master-host=172.16.10.1

测试
A服务器
mysql> show master status\G

B服务器
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

A服务器做出数据改动 查看从服务器是否有同步的变化


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容