最近在学习了Mysql主从复制+Mycat读写分离后,一直想写一遍关于自己的使用心得,开始只写了Mycat的读写分离使用,但是总感觉缺少点什么,就像事情制作了一半的感觉,所以今天就将前面说的Mysql中从复制补上吧,也算是对这部分的总结。
在开始MySQL主从复制之前,需要准备好以下几项工作:
工具
环境/工具 | 说明 |
---|---|
MySQL | 对于版本没有特殊要求,推荐使用5.7.X |
VMware | 这个一个虚拟环境工具,也可以使用其他的工具,这里不做限制 |
Linux系统 | 在虚拟机上安装的操作系统 |
服务器1 | 安装MySQL,用于做主数据库 |
服务器2 | 安装MySQL,用于做从数据库 |
说明:这里不对上述的工具安装做介绍,如果安装疑问,请自行百度搜索。
主数据库服务器:MySQL-Master,从数据库服务器:MySQL-Slave,均已安装MySQL,并且无应用数据。
Master数据库上进行设置,修改配置文件/etc/my.cnf,添加如下配置
设置:log-bin=mysql-bin
用yum安装的mysql数据库/etc/my.cnf文件只是满足基本要求,mysql主从时,查看master日志时没有数据显示,因此在/etc/my.cnf文件中添加一行
设置:server-id = 1
此值不能和从数据库的一样
设置:binlog-ignore-db=mysql
表示哪些库不同步,每个不同步的库写一行
进入Master数据库安装目录 /usr/local/mysql/bin/
# cd /usr/local/mysql/bin/
执行以下命令登录MySQL数据库
# mysql -uroot -p123456
-u:数据库用户名
-p:数据库密码
执行以下命令查看Master的状态
mysql> show master status;
记录File的mysql-bin.000006与 Position的154,等会要用到。
分配一个数据库账号给Slave从数据库 Server,使从服务器能够访问Master数据库;
grant replication slave on *.* to 'slave'@'%' identified by '123456'
查询mysql 数据库中的user表,查看已分配的用户权限;select * from user;
从服务器Slave server数据库配置, 修改配置文件/etc/my.cnf,添加如下配置
# vi /etc/my.cnf
设置:server-id=2
此值不能和主数据库的一样,唯一
设置:replicate-do-db = test
可以指定要复制的库
设置:replicate-ignore-db = mysql
忽略的库
配置完成重新启动Slave数据库。
进入Salve数据库安装目录 /usr/local/mysql/bin/
# cd /usr/local/mysql/bin/
执行以下命令登陆本地数据库:
# mysql -uroot -p123456
mysql> CHANGE MASTER TO
-> Master_Host=192.168.xxx.xxx,
-> Master_User=slave,
-> Master_Password=123456,
-> Master_Port=3306,
-> Master_Log_File=mysql-bin.0000006,
-> Master_Log_Pos=154;
启动Slave同步进程
mysql> start slave;
主从同步检查:
mysql> show slave status\G
特别注意:如果Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,表明成功了,其中任意一个如果不是YES都说明同步失败。
在Master服务器test数据库上创建一个表t_class,查看是否在Slave从服务器test数据库中自动创建t_class;
执行建表SQL
mysql> create table t_class(id int ,name varchar(16));
分别查看master数据库和slave数据库
发现master和slave数据库中都已经有了t_class这张表,这说明此时MySQL主从复制已经生效,大功告成。
由于之前第一次使用MySQL主从,不小心对slave数据库进行了插入数据,结果导致,两个数据库立刻出现了不同步的现象,再次特别说明以下,主从复制是将master数据库的数据复制到slave数据库上,所以如果再slave数据库做了任何的修改都会导致两个数据库出现不同步的现象,如果出现不同步的情况,需要自行解决同步问题。