近期在学习MYSQL的主从读写分离,先学习了如何配置MYSQL的主从复制,在这里记录一下步骤。
我采用的是在虚拟机上通过docker来开启两个节点作为主从数据库服务,那么首先要在docker上拉取镜像
docker pull mysql
拉取完镜像后,我们可以用docker images命令来查看拉取完成的镜像
这里可以看到,mysql的镜像已经拉取下来了,那么下一步就是要开启两个节点,分别作为主节点和从节点
docker run -itd --name mysql-master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
docker run -itd --name mysql-slave -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
这样,我们就开了两个节点,3306端口是主节点,3307节点是从节点
节点创建好了,那么下一步就是要开启主从复制了。
首先,我们需要修改主节点的配置文件
进入主节点的容器内部
docker exec -it mysql-master bash
可以看到,我们成功进入了容器
配置文件的路径在/etc/mysql/my.cnf中,这时候我们一般会vim /etc/mysql/my.cnf。但docker容器中并没有自带vim编辑器,所以我们还需要自行下载。
先输入 apt-get update
,等待更新完毕后,再输入 apt-get install vim
,等待安装完毕,我们就可以正常使用vim进行编辑了。
成功安装vim,我们来编辑mysql的配置文件
主要的操作就是,在mysqld下面,加上两行配置。l og-bin=mysql-bin
,这一步是开启操作记录日志,主从复制就是通过这里的日志来进行的。server-id=1
,则是给主节点指定一个标识,从节点要与之不同。
这里配置完成后,输入exit退出容器,然后 docker restart mysql-master
重启主节点,主节点上的配置就算完成了。
主节点配置完了,下一步就是配置从节点。
和主节点一样,进入从节点的容器,然后修改my.cnf
这里只需要指定一个不同于主节点的server-id即可。
同样,修改完成后,我们重启从节点。
下一步,我们就要去mysql中输入命令开启主从复制了。
首先我们用navicat连接主从两个服务器
首先打开主节点的查询界面,输入 show master status,执行
这里的file和position是需要记下来的,在从节点的配置上有用。
由于我们采用的是docker进行部署,docker容器间是隔离的,所以无法直接通过本地ip访问到主节点。好在docker为容器提供了虚拟ip,容器之间可以通过这些虚拟ip进行相互访问。
输入 docker inspect mysql-master
会输出很多内容,里面有我们需要的虚拟ip
可以看到,主节点的虚拟ip是172.17.0.2。知道这个以后,我们就可以去从节点进行配置了。
change master to
master_host='172.17.0.2',
master_port=3306,
master_user='root',
master_password='123456',
master_log_file='mysql-bin.000002',
master_log_pos=348
执行如上语句,即可让从节点通过主节点的日志来进行复制操作,也就是主从复制了。
执行完上述语句后,再执行 start slave
我们就可以真正开启主从复制了
我们可以输入 show slave status
来查看状态
如果我们看到Slave_IO_State是Waiting for source to send event,那就代表着我们的主从复制已经成功了。
下面我们来测试一下,是否真的可以实现主从复制。
我们在主库执行语句 create database test_db
可以看到,主库和从库都创建了一个新的数据库test_db
我们在主库新建表、插入数据等操作,都会被同步到从库中,证明我们的主从同步已经配置成功了。