因为业务需要要做mysql读写分离,最近抽空研究了下,发现读写分离是以mysql主从复制为基础进行的,今天就先记录下搭建一个主从环境的过程,本文只会记录搭建过程,不会有任何主从原理等理论知识。
主库负责接受外部数据,系统在运行过程中的业务数据持久化是直接在主库中进行,不会涉及到从库(读写分离另论)。
本文中主库使用的windows环境,从库使用Ubuntu下docker环境。
过程
1:修改主库和从库的配置文件
2:重启服务
3:主库分配从库复制用的账号
4:从库使用主库分配的账号与主库进行连接
5:检查结果
修改配置文件
windows系统中,如果找不到mysql配置文件位置可以通过mysql服务找到,具体操作如下:
1:右键‘此电脑’,选择管理
3:右键MySQL,选择属性,红色标记就是配置文件地址,修改该文件就行
修改配置文件后在这个界面进行mysql服务的重启,先停止后启动。
Linux系统中,查看mysql配置文件使用命令
mysql --help | grep my.cnf
找到配置文件后,编辑配置文件,在配置文件中添加
#id集群内唯一且为整数
server-id=1
#二进制变更日志名称
log-bin=mysql-bin
修改完成后保存并重启服务。重启完成后进入mysql命令行,输入
show master status \G
到此主库搞定!
从库为了方便我使用的是docker环境,配置和主库配置一样,在配置文件中配置添加一个server-id即可。
docker环境搭建及使用这里就不详细说明了。直接说在docker中配置mysql从库步骤。
1.先从镜像库中下载官方mysql镜像并开启容器。进入该容器,找到配置文件,/etc/mysql文件夹下的my.cnf
docker run --name mysql -p 3306:3306 --privileged=true -e MYSQL_ROOT_PASSWORD=123456 -d mysql
2.将docker中的配置文件复制到宿主机中进行修改,使用如下命令将docker中文件复制到宿主机上
docker cp mysql容器id:/etc/mysql/my.cnf /home/mysqlconf/
3.修改上一步复制下来的my.cnf在其中添加
#id集群内唯一且为整数
server-id=1
#二进制变更日志名称,如果从库不需要向其他节点继续同步则该配置可以不用
log-bin=mysql-bin
4.将修改后的文件替换掉docker容器中的my.cnf,重启容器,并检查mysql服务是否启动成功。
建立主库与从库的关系
1.打开主库的命令行工具,给从库分配账号及权限。
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO mysql_backup@'%' IDENTIFIED BY '123456';
2.打开从库mysql命令行工具
CHANGE MASTER TO
MASTER_HOST='主库ip',
MASTER_PORT=主库端口,
MASTER_USER='mysql_backup',
MASTER_PASSWORD='123456';
3.在从库mysql命令行工具中输入
START SLAVE;
show slave status \G
查看结果第一行是否是Waiting for master to send event,以及红色标记处是否都是yes。如果没有请检查配置。
如果配置没有问题,请检查两个网络情况,如果网络情况没问题,在命令行输入
stop slave ;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave ;
再查看下状态,此时为止,mysql主从复制环境搭建完成。
测试
使用navicat连接主库和从库,在主库中新建数据库或者表或者在表中添加数据,在从库中就能立即看到主库中添加的内容