博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux复盘:mysql双主与mysql-proxy实现读写分离
阅读量:6115 次
发布时间:2019-06-21

本文共 4070 字,大约阅读时间需要 13 分钟。

hot3.png

不停库不锁表在线主从配置

这里用到了前面的innobackupex:

mysqldump对于导出10G以下的数据库或几个表,还是适用的,而且更快捷。一旦数据量达到100-500G,无论是对原库的压力还是导出的性能,mysqldump就力不从心了。Percona-Xtrabackup备份工具,是实现MySQL在线热备工作的不二选择,可进行全量、增量、单表备份和还原。(但当数据量更大时,可能需要考虑分库分表,或使用 LVM 快照来加快备份速度了)

2.2版本 xtrabackup 能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份,innobackupex通过perl封装了一层xtrabackup,对MyISAM的备份通过加表读锁的方式实现。2.3版本 xtrabackup 命令直接支持MyISAM引擎。

XtraBackup(包含innobackupex)优势 :

  1. 无需停止数据库进行InnoDB热备
  2. 增量备份MySQL
  3. 流压缩到传输到其它服务器
  4. 能比较容易地创建主从同步
  5. 备份MySQL时不会增大服务器负载

mysql主从不同步如何做

show slave status\GSlave_IO_Running: Yes Slave_SQL_Running: No 可见是Slave不同步 

方法一:忽略错误后,继续同步 

该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况 解决: 
stop slave; 
#表示跳过一步错误,后面的数字可变 
set global sql_slave_skip_counter =1; 
start slave; 
之后再用mysql> show slave status\G 查看: 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 

方法二:厉害了重新搞一遍,主要是数据的同步该方法适用于主从库数据相差较大,或者要求数据完全统一的情况 

MySQL双主(主主)架构方案思路是

1.两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用;

2.masterA是masterB的主库,masterB又是masterA的主库,它们互为主从;

3.两台主库之间做高可用,可以采用keepalived等方案(使用VIP对外提供服务);

4.所有提供服务的从服务器与masterB进行主从同步(双主多从);

5.建议采用高可用策略的时候,masterA或masterB均不因宕机恢复后而抢占VIP(非抢占模式);

这样做可以在一定程度上保证主库的高可用,在一台主库down掉之后,可以在极短的时间内切换到另一台主库上(尽可能减少主库宕机对业务造成的影响),减少了主从同步给线上主库带来的压力;

但是也有几个不足的地方:

1.masterB可能会一直处于空闲状态(可以用它当从库,负责部分查询);

2.主库后面提供服务的从库要等masterB先同步完了数据后才能去masterB上去同步数据,这样可能会造成一定程度的同步延时;

masterA自增长ID:vi /etc/my.cnfserver-id = 1auto_increment_offset = 1auto_increment_increment = 2  #奇数IDlog-bin = mysql-bin  #打开二进制功能,MASTER主服务器必须打开此项(双主)log-slave-updates = true  #将复制事件写入binlog,一台服务器既做主库又做从库此选项必须要开启masterB自增长ID:vi /etc/my.cnfserver-id = 2auto_increment_offset = 2auto_increment_increment = 2  #偶数IDlog-bin = mysql-bin  #打开二进制功能,MASTER主服务器必须打开此项log-slave-updates = true

 添加主从同步账户

masterA上:mysql> grant replication slave on *.* to 'repl'@'192.168.10.12' identified by '123456';mysql> flush privileges;masterB上:mysql> grant replication slave on *.* to 'repl'@'192.168.10.11' identified by '123456';mysql> flush privileges;查看主库的状态masterA上:mysql> show master status;masterB上:mysql> show master status;

 配置同步信息

masterA上:mysql> change master to master_host='192.168.10.12',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=437;mysql> start slave;mysql> show slave status\G;显示有如下状态则正常:Slave_IO_Running: YesSlave_SQL_Running: YesmasterB上:#本人是测试环境,可以保证没数据写入,否则需要的步骤是:先masterA锁表-->masterA备份数据-->masterA解锁表 -->masterB导入数据-->masterB设置主从-->查看主从复制代码mysql> change master to master_host='192.168.10.11',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=120;start slave;mysql> show slave status\G;显示有如下状态则正常:Slave_IO_Running: YesSlave_SQL_Running: Yes

mysql-proxy实现读写分离

1、安装lua  (mysql-proxy需要使用lua脚本进行数据转发) #tar zxvf lua-5.1.4.tar.gz #cd lua-5.1.4 #vi Makefile,修改INSTALL_TOP= /usr/local/lua #make posix #make install 2、安装libevent #tar zxvf libevent-2.0.8-rc.tar.gz #cd libevent-2.0.8-rc #./configure --prefix=/usr/local/libevent #make && make install 3、安装check #tar zxvf check-0.9.8.tar.gz #cd check-0.9.8 #./configure && make && make install 4、安装mysql客户端 #tar zxvf mysql-5.0.92.tar.gz #cd mysql-5.0.92 #./configure --without-server && make && make install 5、设置环境变量 (安装mysql-proxy所需变量) #vi /etc/profile export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm" export CPPFLAGS="-I/usr/local/libevent/include" export CFLAGS="-I/usr/local/libevent/include" # source /etc/profile 6、安装mysql-proxy #tar zxvf mysql-proxy-0.6.0.tar.gz #cd mysql-proxy-0.6.0 # ./configure --prefix=/usr/local/mysql-proxy --with-mysql --with-lua #make && make install 7、启动mysql-proxy 本次对两台数据库实现了读写分离;mysql-master为可读可写,mysql-slave为只读 #/usr/local/mysql-proxy/sbin/mysql-proxy --proxy-backend-addresses=192.168.1.201:3306 --proxy-read-only-backend-addresses=192.168.1.202:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/mysql-proxy/rw-splitting.lua &  注:如果正常情况下启动后终端不会有任何提示信息,mysql-proxy启动后会启动两个端口4040和4041,4040用于SQL转发,4041用于管理mysql-proxy。如有多个mysql-slave可以依次在后面添加

 

转载于:https://my.oschina.net/u/3655649/blog/1617207

你可能感兴趣的文章
python中时间的加n和减n运算
查看>>
FTP的两种工作模式
查看>>
配合使用自制的PE3.0启动盘和Windows部署服务,实现Ghost网克
查看>>
web part迁移到sharepoint 2010后error的解决
查看>>
Vsftpd虚拟用户模式配置
查看>>
MSDN版,MSDN/OEM/RTM/VLK版的区别
查看>>
我的友情链接
查看>>
了解你所不知道的SMON功能(七):清理IND$字典基表
查看>>
PLSQL配置
查看>>
vlan间路由(通过一个路由器,也称单臂路由)
查看>>
linux命令:NTP网络时间同步服务器搭建配置及cisco交换机ntp配置
查看>>
IT技术图书离开一次性交易
查看>>
会畅通讯实力揽获 “2017中国IT用户满意度”奖项
查看>>
Debian资源库已加入Spectre、Meltdown漏洞检查器
查看>>
corosync v2 + pacemaker 高可用mariadb服务
查看>>
nginx反代后端动静分离 php会话保持使用memcached
查看>>
Word for mac 分小节问题
查看>>
WindowsServer2012史记6-Windows To Go的实践
查看>>
Windows Server 2008 AD R2 AD回收站恢复删除用户两种方法的比较
查看>>
演示:思科路由器上DHCP帮助地址的配置
查看>>