MySQL5.5主从复制架构配置及注意事项
主要是总结下部署MySQL主从复制架构流程中遇到的问题及需要注意:
1.为什么要主从同步
在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一。尤其是在大规模系统中,数据库集群已经成为必备的配置之一。集群的好处主要有:查询负载、数据库复制备份等。其中Master负责写操作的负载,也就是说一切写的操作都在Master上进行,而读的操作则分摊到Slave上进行。这样一来的可以大大提高读取的效率。写操作涉及到锁的问题,不管是行锁还是表锁还是块锁,都是比较降低系统执行效率的事情。我们这样的分离是把写操作集中在一个节点上,而读操作其其他的N个节点上进行,从另一个方面有效的提高了读的效率,保证了系统的高可用性。
2.MySQL版本
本文中要同步的两台mysql数据库版本都是mysql5.5,两台电脑都在同一个网段之中
3.MySQL主数据库配置
安装完MySql后,在安装目录下(一般为C:\Program Files\MySQL\MySQL Server 5.5)找到my.ini配置文件,打开文件在最后面添加以下内容:
server-id=1 #这是数据库的ID,标识数据库集群中的唯一,重复会导致同步出错
log-bin=mysql-bin #二进制日志文件,此项为必填项,否则不能同步数据;如果不取名字的话,那么就会以计算机的名字加编号来命名二进制文件
binlog-do-db=testcreate #需要同步的数据库,如果还需要同步另外的数据库,那么继续逐条添加,如果不写,默认同步所有的数据库
binlog-ignore-db=mysql #不需要同步的数据库
修改完成后,保存,重启MySql服务
注意:在linux下,只需要修改/etc/my.cnf即可。
4.主数据库授权一个可以进行复制的用户
主数据库授权一个可以进行复制的用户,执行如下命令:
grant replication slave on *.* to 'slave'@'%' identified by '123';
–其中’slave’@’%’ 的slave为用户名,%标识限制,可配置为指定IP增加安全性
–identified by ‘123’中123是为用户设置的密码
也可以使用比如Navicat Premium连接数据库可视化操作
使用一下语句查看是否授权成功
SHOW GRANTS FOR '用户名'@'IP/%'
执行后,授权完成会出现一下内容
5.从数据库配置
在从服务器上找到MySql安装目录下的my.ini文件,添加以下配置
server-id=2 #数据库的ID,唯一标识
log-bin=mysql-bin #二进制日志文件,从数据库没有必要开启二进制日志,但是在一些情况下,必须设置,例如,如果从数据库(slave)为其它从数据库(slave)的主数据库(master),必须设置bin_log
relay-log=relay-bin #配置中继日志,定义relay_log的位置和名称,如果值为空,则默认位置在数据文件的目录
relay-log-index=relay-bin-index #同relay_log,定义relay_log的位置和名称
replicate-do-db=test #指定slave要复制master上的哪个库
修改完成后,重启从数据库的MySql服务
5.2登录从数据库mysql,连接主数据库
- 在mysql下执行slave stop命令,停止slave服务;
- 执行如下命令改变主数据库
change master to master_host='192.168.1.194',master_user='slave',master_password='123',master_log_file='mysql-bin000014.000001',master_log_pos=107;
- 执行slave start命令,启动服务
注意:这里的master_log_file,master_log_pos的值要和master的值一致。否则会无法同步。在主数据库(master)使用show master status;查看master的信息
注意:在这里可能会无法链接到主数据库,需要看主数据库中my.ini中bind 127.0.0.1是否没有被注释,如果没有,那么只能在本机登录,而不能使用远程登录方式。
6.验证是否同步
在从数据库执行
show slave status\G;
得到如下结果则说明同步成功。
也可以在主数据库被同步的表中做crud操作,看从数据库中的数据有无变化。
至此,配置完成。
7.注意事项
7.1主从数据库要在同一网段中
7.2主从数据库所在服务器防火墙设置允许mysql端口(默认为3306)
7.3本文中主从数据库都是新建的库,所以没有主从同步的问题,如果主库已运行一段时间,想对新安装的slave进行数据同步,甚至它没有master的数据。
此时,有几种方法可以使slave从另一个服务开始,例如,从master拷贝数据,从另一个slave克隆,从最近的备份开始一个slave。Slave与master同步时,需要三样东西:
(1)master的某个时刻的数据快照;
(2)master当前的日志文件、以及生成快照时的字节偏移。这两个值可以叫做日志文件坐标(log file coordinate),因为它们确定了一个二进制日志的位置,你可以用SHOW MASTER STATUS命令找到日志文件的坐标;
(3)master的二进制日志文件。
可以通过以下几中方法来克隆一个slave:
(1) 冷拷贝(cold copy)
停止master,将master的文件拷贝到slave;然后重启master。缺点很明显。
(2) 热拷贝(warm copy)
如果你仅使用MyISAM表,你可以使用mysqlhotcopy拷贝,即使服务器正在运行。
(3) 使用mysqldump
使用mysqldump来得到一个数据快照可分为以下几步:
<1>锁表:如果你还没有锁表,你应该对表加锁,防止其它连接修改数据库,否则,你得到的数据可以是不一致的。如下
FLUSH TABLES WITH READ LOCK;
在另一个连接用mysqldump创建一个你想进行复制的数据库的转储:
mysqldump --all-databases --lock-all-tables >dbdump.db
<3>对表释放锁。
UNLOCK TABLES;
就先写到这里吧,以后有了解再进行补充。大神勿喷。