mysql的主从备份和读写分离

1.mysql的主从备份原理
如图所示:
master接收到了SQL的时候,会存入到一个binlog的文件并入库,binlog数据存储完毕后会开启一个dump thread线程,
这个线程会将binlog的数据同步到slave的io thread,io thread将数据存储到delay binlog(中继日志),启动一个sql thread
将数据写入slave的binlog和data中。binlog有个position的字段,和RandomAccessFile中的指针的概念是一样的,会记录上次的位置,这样就可以将binlog的数据从新的position开始同步,不会造成重复。

2.实现主从备份前的准备
我这边准备了二个虚拟机,安装了centos7,并安装了二台mysql,用户名为root,密码都是123
148的数据库和149的数据库都新建了一个叫做common_db的数据库

3.主库的配置
(1)vim /etc/my.cnf新增如下的配置
server_id=1
#开启binlog
log-bin=mysql-bin
binlog_format=row
skip_slave_start=1
#开启gtid事物,否则后面有一步会报错
gtid_mode=on
enforce_gtid_consistency=on
#需要同步的二进制数据库名;
binlog-do-db=common_db
##不同步的二进制数据库名,如果不设置可以将其注释掉;
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=personalsite
binlog-ignore-db=test

(2)重启mysql
/etc/rc.d/init.d/mysql restart

(3)建立用于同步的用户

#查看所有binlog日志 
mysql> show binary logs;
#查看所有binlog事件
mysql> show binlog events in 'mysql-bin.000003’;

(4)查看master的状态,记录好position和file

4.从库的配置
(1) vim /etc/my.cnf
#这里server_id区分master
server_id=2
socket=/var/lib/mysql/mysql.sock
binlog_format=row
#开启slave的binlog
log-bin=mysql-slave-bin
binlog-do-db=common_db
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=personalsite
binlog-ignore-db=test
skip_slave_start=1
gtid_mode=on
enforce_gtid_consistency=on

(2)重启mysql
/etc/rc.d/init.d/mysql restart

(3)连接主库
mysql> CHANGE MASTER TO
             MASTER_HOST='master_host_name',
             MASTER_USER='replication_user_name',
             MASTER_PASSWORD='replication_password',
             MASTER_LOG_FILE='recorded_log_file_name',
             MASTER_LOG_POS=recorded_log_position;
这里的对应的参数填写安装自己配置
我这边是192.168.240.148,slave1,123,mysql-bin.000003,959
注意,这里的logfile和logpos一定要和上面的file和position数值一致

(4)启动slave
mysql>start slave;

(5)查看show slave status\G
如果这里slave_io_running sql_running都是Yes,表示主从备份已经安装完毕

5.主从演示
主库中执行,发现server_id=2已经连接上了

主库新增表test,新增数据1-8
发现从库数据也同步过来,安装成功

6.读写分离的配置
我这边用amoeba,在主库所在的服务上部署

1.下载amoeba

2.解压
tar -xzvf amoeba-mysql-binary-2.0.1-BETA.tar.gz

3.修改对应的配置
进入conf目录下
vim dbServers.xml
我这里配置的server1是主库,server2是从库
同级目录下修改vim amoeba.xml
这里配置代理库的用户名和密码
这里的write pool和read pool配置上么的主库name和从库name
进入bin目录下(与conf目录同级)vim amoeba
修改DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k”

7.启动amoeba(端口8066)
./amoeba start

7.验证读写分离
配置,端口是8066
读是149库,写是148库,具体的验证太长,不贴图了


8.开启mysql的半同步复制(参考:https://www.cnblogs.com/ivictor/p/5735580.html
master: INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so’;
slave:INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
查看是否安装完毕:
主&从:
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
重启从上的IO线程
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;
验证是否已经生效


总结:
mysql的主从备份和读写分离配置难度不大,技术上还需要解决对读写优化的处理,但是这个只是最基础的配置,实际上还有很多地方可以改进,比如半同步复制,并行复制,以及容灾配置,但是对于中型企业,主从加上读写分离完全够用了。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值