mysql+主从同步+用户,基于mysql的主从复制+半同步复制

本文详细介绍了MySQL的主从复制架构,包括主从模型、配置步骤和注意事项,强调了只读从服务器和通过server-id避免重复操作的重要性。还探讨了在从服务器崩溃后如何进行数据备份和恢复。此外,文章还讲解了MySQL的半同步复制功能,确保至少一台从服务器复制完成后再执行后续操作,以及如何启用和配置这一特性。
摘要由CSDN通过智能技术生成

mysql的复制架构

mysql的服务器可以一主多从,但是一台从服务器默认只能有一个主服务器。

mysql的主从模型

主从模型具体如下图所所示

210116400.png

在主从模型中,所有的写操作都只能在主服务器上完成,并记录到自己的二进制日志中。然后从服务器的IOthread线程发起复制

请求,主服务器的dumpthread响应IOthread并读取自己二进制文件中的sql语句发送给从服务器,iothread把主服务器发送来的内容

写到自己的relaylog中,然后有sql thread从relaylog中读取数据并运行在自己的服务器上。在这里需要说明的是,在从服务器上

只能进行读操作。在主从模型中通过serverid来进行标识,以避免重复操作

在主从服务架构中需要注意到的问题如下

1、从服务器在复制时,要指定事件位置,也就是从那个点开始复制。

2、如果主服务器已经运行一段时间后,从服务器才开始复制,这时最好对主服务器进行备份并指定备份的时间点,以方便从服务器的复制。

3、主从的server id不能一样

实验步骤

1、创建逻辑卷,存放数据

#fdisk /dev/sda

#partprobe /dev/sda

#pvcreate /dev/sda5

#vgcreate myvg /dev/sda5

#lvcreate -n mylv -L 10G myvg

#mke2fs -j /dev/myvg/mylv

2.创建共享目录并开机自动挂载逻辑卷

#mkdir /mydata                   //创建共享目录

#vim /etc/fstab                  //开机自动挂载

/dev/myvg/mydata        /mydata      ext3    defaults        0 0

3、创建用户

#groupadd -g 306 -r mysql

#useradd -g mysql -r -u 306 mysql

#chown mysql:mysql /mydata       //修改共享目录的属主属组为mysql

4、安装并初始化mysql

#tar xf mysql-5.5.20-linux2.6-i686 -C /usr/local

# cd  /usr/local#ln -sv mysql-5.5.20-linux2.6-i686  mysql //创建连接

#chown -R mysql:mysql .

#cp support-files/my-large.cnf  /etc/my.cnf  //配置文件

#vim /etc/my.cnf

在[mysqld]处 添加datadir=/mydata    //添加数据存放位置

#scripts/mysql_install_db --user=mysql--datadir=/mydata //初始化Mysql

#chown -R root .

#cp support-files/mysql.server  /etc/rc.d/init.d/mysqld //提供mysql脚本

#servie mysqld start

#/usr/local/mysql/bin/mysql        //启动并测试mysql是否可用

#service mysqld stop                     //必须关闭,否则在节点2上无法启动

#scp /etc/my.cnf mynode2:/etc           //把mysql的配置文件复制到node2上

#scp /etc/rc.d/init.d/mysqld mynode2:/etc/rc.d/init.d/mysqld  //复制服务脚本

以上在主从服务器上做相同操作

5.配置主从服务器

主服务器配置如下

#vim /etc/my.cnf

binlog_format=mixed//启用二进制日志

server-id=1//设置server-id

创建具有复制权限的用户

mysql>grant replication slave,replication client on *.* to repluser@'172.16.26.%' identified by'1234';

mysql>flush privileges;

在启用从服务器之前,需要使用如下命令记录一下主服务器当前的时间点

mysql>show master status

从服务器配置如下

#vim /etc/my.cnf

#log-bin=mysql-bin              //禁用二进制日志

relay-log=mysql-relay           //启用中继日志

server-id=12//设置server id

#service mysqld restart               //重启mysql使配置生效

查看日志的启动情况, 如下图所示

mysql>show global variables like "%log%";

211602123.png

查看配置的server_id,如下所示

mysql>show global variables like "%server_id%";

211741393.png

启动从服务,并指定主服务器参数  不能写在配置文件中,多个参数之间使用逗号隔开。

#service mysqld restart

mysql>change master to

MASTER_HOST='172.16.200.1'//主服务的ip地址

MASTER_USER='repluser'//主服务器的建立的用户

MASTER_PASSWORD='123'//主服务器的用户密码

MASTER_LOG_FILE='mysql-bin.000001'//主服务器的日志文件

MASTER_LOG_POS = 352    //日志文件的位置

MASTER_PORT = 3306             //主服务器所在的端口

设置好参数后,查看自己服务器的/mydata/data下产生的文件,如下图所示

212032651.png

在从服务器上使用show slave status\G;查看服务是否启动复制功能

mysql>start slave  //启动slave的复制功能

212210304.png

验证主从服务的效果,

在主服务器上进行如下操作,然后可以在从服务上进行查看。

mysql>create databases testdb;

mysql>create  table tb1;

因为只能在从服务器上进行读操作,所以要阻止用户对从服务器进行写操作具体使用如下

mysql>show global variables like 'read_only'  //查看只读状态

mysql>set globalread_only=1;                //设置为只能只读

假设从服务器崩溃,而主服器已经运行了很长时间,这就需要对主服务器进行备份。这里使用逻辑卷进行备份。

mysql>flush tables with read lock;           //施加锁

#lvcreate -L 50M -s -p r -n mysqldata-snap /dev/myvg/mylv  创建快照卷

mysql>show master status //记录二进制日志文件的位置

mysql>unlock tables        //释放锁

mount /dev/myvg/mysqldata-snap /mnt   挂载快照卷

cd /mnt

find . | cpio -o -H newc --quiet | gzip >/root/alldatabase.gz  //打包压缩

#umount /mnt                 //卸载

#lvremove mysqldata-snap     //删除快照卷

#scp alldatabse.gz node2:/mydata

在从服务器上恢复数据,在进行数据恢复之前,删除/mydata下的从服务器的所有文件,并停止mysql服务

#cd /mydata

#gzip -d alldatabases.gz

#cpio -id 

然后就可以启动从服务器,进行上述的测试了。

mysql半同步复制

在一主多从的场景中,主服务器会一同步的方式,只等待一台从服务器复制完成并返回成功信息后才停止等待过程,但是在超时后会自动降级为异步模式。

在主从复制的基础上,只需执行如下操作即可。

# On Master

mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

mysql>SET GLOBALrpl_semi_sync_master_enabled=1;

mysql>SET GLOBALrpl_semi_sync_master_timeout=1000;

# On Slave

mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

mysql>SET GLOBALrpl_semi_sync_slave_enabled=1;

mysql>STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;

如果需要开机时,自动能够实现半同步则需要在Master和Slave的my.cnf中编辑:

# On Master

[mysqld]

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000# 1 second

# On Slave

[mysqld]

rpl_semi_sync_slave_enabled=1

查看从服务器上的semi_sync是否开启:

mysql>SHOW GLOBAL STATUS LIKE 'rpl_semi%';

221931538.png

查看主服务器上的semi_sync是否开启,注意clients 变为1 ,证明主从半同步复制连接成功:

mysql>SHOW GLOBAL STATUS LIKE 'rpl_semi%';

222049855.png

本文转自  沐木小布丁  51CTO博客,原文链接:http://blog.51cto.com/sxhxt/957712

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值