Linux搭建Mysql主从服务器

搭建服务器时数据库可以说是服务器的瓶颈,服务器压力大的时候多数的瓶颈是因为数据库的造成的,因此为了解决高并发可以扩充扩容用多台mysql服务器,那么这个时候会有个问题,多台服务器之间的数据读和写是如何保持同步的呢?
我们可以使用mysql主从复制解决这个问题,即一台主服务器实现写操作多台从服务器实现读操作,从服务器数据与主服务器保持一致,如此当高并发情况出现时服务器的压力就没有那么大了。
主从服务器可以分为多种,一主一从,一主多从,多主多从
这里搭建的是最简单的一主一从
1.首先要做的就是架设两台服务器并都安装好了mysql,我这里是在VMware上安装的两台虚拟机,系统是Centos 7
启动两台虚拟机上的mysql服务
Linux搭建Mysql主从服务器
2.关闭防火墙和selinux
systemctl stop firewalld.service && systemctl disable firewalld.service
setenforce 0
3.修改/usr/local/mysql/my.cnf
server_id = 1#主机可以设置为1,从机可以设置为IP最后一段(保证唯一性)
log_bin=mysql-bin #主从服务的核心
systemctl resatrt mysql.servicec#重启服务器
4.主服务器上和从服务器数据库和表保持一致
1.登录数据库服务器
mysql -uroot -p
2.创建测试数据库
create database test;
3.选择test数据库
use test;
4.创建用于主从测试的数据表user
create table user(id int(11) auto_increment primary key, name varchar(30) )engine=innodb,default charset=utf8;
5.主从服务器配置(创建一个专门用来同步数据的账号)
grant replication slave on . to ‘mysync’@’%’ identified by ‘12345678’;

all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user
to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”yangxin”@”192.168.0.%”,表示yangxin这个用户只能在192.168.0IP段登录
identified by:指定用户的登录密码
with grant option:表示允许用户将自己的权限授权给其它用户

flush privileges;#刷新权限
show master status; #查看状态,此后不要再进行任何操作
显示如下,其中File和Position值配置从服务器时要用
Linux搭建Mysql主从服务器
6.从服务器上进行配置
change master to master_host=’192.168.64.136’,master_user=’mysync’,master_passowrd=’12345678’,master_log_file=’mysql-bin.[File]’,master_log_pos=[Position];
[File]和[Position]要与上图中主机状态显示的一致
start slave;#开启从服务
Linux搭建Mysql主从服务器
Slave_IO_Running: Yes #负责与主机的io通信
Slave_SQL_Running: Yes #负责自己的slave mysql进程

这里有个问题就是从服务器启动时Slave_IO_Running总是为no,博主查看了错误日志才发现原因是Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.也就是每个mysql实例UUID(UUID保存在datadir目录下的auto.cnf文件中)不唯一,之所以出现会出现这样的问题,是因为我的从库主机是克隆的主库所在的主机,所以auto.cnf文件中保存的UUID会出现重复,解决方法就是关于该问题的解决停掉备库实例,删除备库的auto.cnf文件,启动备库实例,此时备库就会产生一个新的auto.cnf文件(产生新的UUID)

7.主服务器上进行插入数据测试
insert into user(name) values(‘小杰’);
Linux搭建Mysql主从服务器
从服务器上查看
select * from user;
Linux搭建Mysql主从服务器