Mysql 集群有很多种,一主一从,主主,多主多从等。根据自己的业务选择合适的集群架构。
但是这些集群架构,都是基于一主一从演变的。下面就从零开始搭建一主一从的架构模式。
参考Mysql5.7中文手册,根据文档内容,自己尝试了一遍。没问题,现在将自己配置主从模式的过程分享给大家。
首先讲解一下,主从模式能带来什么?
1.如果MySQL主服务器访问量比较大,可以通过 复制数据,然后在从同各器上进行查询操作,从而降低主服务器的访问压力
2.从服务器作为主服务器的备份,可以避免主服务器因为故障数据丢失的问题
主从的实现原理:
请看下面的主从官方标准图片
下面我以我自己的理解,以自己的语言简述一下执行流程。专业人士勿喷。
可以简单的理解为,Master主服务器每条写操作都会记录在这个 Binarylog 二进制文件中。
然后从Slave从服务器会去不断的读取Master的Binarylog内容,然后写进自己的Relay日志中
从服务器再从Relay日志将从主服务器复制过来的sql操作更新到自己的服务器中。这样主从服务器的数据就能够保持一致了。
总结主从搭建的过程:
1.Master开启主库的binlog日志。(默认是不开启的)
2.Master创建一个给Slave进行复制Binlog日志的账号并赋予权限。
3.为了确保数据一致性,停止主服务
(两个方法可以实现1.停止Mysql服务,2.利用锁机制,将Mysql的表全部锁住,不允许写入)
4.将Master的数据备份到Slave
5.备份完,开启Slave的主从模式
6.将Master的锁释放,或者开启Mysql服务。
下面从0开始一步步进行主从配置。
声明。 10.122.80.70 为我的主Master服务器
10.122.80.35 为我的从Slave服务器
1.开启Master的Binlog日志
可以查看log_bin 是否开启,如果开启可以略过
show global variables like '%log_bin%';
未开启,则编辑my.cnf配置文件
添加如下内容:
[mysqld]
log-bin=mysql-bin
server-id=1
2.给Master 服务器添加 从服务器的复制账号 并赋予权限
create user 'repl_35'@'%' identified by 'repl_35';
grant replication slave on *.* to 'repl_35'@'%' identified by 'repl_35';
3.查看当前Master 的binlog日志名字与节点(重要)
show master status;
记录下自己的两个字段内容
下面是我的:
File : mysql-bin.000009
Position : 708
4.为确保数据一致性将Mysql的写入操作锁住
flush tables with read lock;
5.开始将主服务器的数据备份至从服务器
利用mysqldump工具
在Slave服务器中先备份数据到自己的临时目录下
laravel-shop 为我的数据库名
mysqldump -h10.122.80.70 -u root -p laravel-shop > /home/laravel-shop.sql
当然,前提是先有laravel-shop数据库
mysql -f -u root -p laravel-shop < /home/laravel-shop.sql
6.备份完数据后,# 配置从节点
修改Slave服务器的my.cnf
server-id = 2
relay_log = /www/server/data/mysql-relay-bin
relay_log-index = /www/server/data/mysql-relay-bin.index
log_slave_updates = 1
read_only = 1
7.在Slave指定主节点的ip,端口,用户
change master to master_host='10.122.80.70',master_port=3306,master_user='repl_35',master_password='repl_35',master_log_file='mysql-bin.000009',master_log_pos=708;
其中 master_log_file 与 master_log_pos 为第三部记住的参数
8.启动从节点
start slave;
查看主从是否成功
show slave status \G;
重点关注两个字段
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
如有报错,请自行百度。
下面就可以在主库进行insert 操作, 从库 select 看是否实现主从。