MySQL5.5主从复制架构配置及注意事项

来源:互联网 发布:php删除相同前缀文件 编辑:程序博客网 时间:2024/06/13 02:54

MySQL5.5主从复制架构配置及注意事项

主要是总结下部署MySQL主从复制架构流程中遇到的问题及需要注意:

  • MySQL55主从复制架构配置及注意事项
    • 为什么要主从同步
    • MySQL版本
    • 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_logrelay-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,连接主数据库

  1. 在mysql下执行slave stop命令,停止slave服务;
  2. 执行如下命令改变主数据库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;
  3. 执行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;

就先写到这里吧,以后有了解再进行补充。大神勿喷。