Mysql主从复制
目的:
是为了后面naocs集群的服务配置做准备工作
准备工作
准备至少两台虚拟机或服务器,安装好了docker,找到他们的ip地址
后面操作都用xshell操作来代替
拉取并启动mysql镜像和容器
主机的命令为mysql01,对外端口用3310来连接
docker run -d -p 3310:3306 -v /home/mysql/node-1/config:/etc/mysql/ -v/home/mysql/node-1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
从机的命名为mysql02,对外端口用3311来连接
docker run -d -p 3311:3306 -v /home/mysql/node-2/config:/etc/mysql/ -v/home/mysql/node-2/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7
命令解释:
-d: 后台运行容器,并返回容器ID
-p 3311:3306 :将容器的3306端口映射到宿主机3310端口
-e MYSQL_ROOT_PASSWORD=123456 :配置数据库连接密码
-v /home/mysql/node-2/config:/etc/mysql/ :将配置文件夹挂载到宿主机
--name mysql01(02):将容器命名为 mysql01(02)
docker ps -a #查看全部容器(运行中加未运行的)分别查看mysql容器的状态
都处于正常运行状态
下面用navicat连接两个数据库
都正常连接
开始主从复制的配置
之前我们启动的时候写了这句-v /home/mysql/node-1/config:/etc/mysql/,将mysql 的配置文件夹和主机的文件夹挂载起来的。
那么我们就可以直接在主机下的/home/mysql/node-1/config/编写配置文件了,
那么从机下的就是/home/mysql/node-2/config/编写配置文件了。
进入主机操作:
cd /home/mysql/node-1/config/
vim my.cnf
复制下面内容进去
[mysqld]
#修改配置文件:vim /etc/my.cnf
#主服务器唯一ID
server_id=1
#启用二进制日志
log-bin=mysql-bin
设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库 需要复制的主数据库名字,多个数据库的话,需要多行书写即可,不可逗号连接
binlog-do-db=testdb
#设置logbin格式
binlog_format=STATEMENT
然后esc-> :wq 保存
进入从机操作
cd /home/mysql/node-2/config/
vim my.cnf
复制下面的内容
[mysqld]
#从服务器唯一ID
server_id=2
#启用中继日志
relay-log=mysql-relay
然后esc-> :wq 保存
分别在主从机上,用命令docker restart mysql01 和 docker restart mysql02 重启mysql的容器
搭建主从复制
进入主机的mysql
docker exec -it mysql01 /bin/bash #进入容器
mysql -uroot -p123456 #连接mysql
主机上建立帐户并授权 slave
给从机授权,为了让从机能够和主机连接起来。
GRANT REPLICATION SLAVE ON . TO 'slave'@'%' IDENTIFIED BY '123456';
复制
查询master状态
show master status; #查询master的状态
把这里的File和Position记下来哈,等下在从机上要用到。
File: mysql-bin.000003
Position: 438
复制
Binlog_Do_DB:需要复制的数据库。
Binlog_Ignore_DB:不需要复制的数据库。
注意:此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化
由此进入从机操作:
进入mysql02容器
docker exec -it mysql02 /bin/bash
mysql -uroot -p123456
输入命令
CHANGE MASTER TO MASTER_HOST='主机的ip地址',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_PORT=3310, MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=438;
解释:
CHANGE MASTER TO MASTER_HOST='主机的IP地址',
MASTER_USER='slave'(刚刚配置的用户名),
MASTER_PASSWORD='123456'(刚刚授权的密码),
master_port=主机开放的端口 我这里是3310端口,
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值(之前的Position);
注意事项:如果在这里出现错误,先重置。执行完下面两条命令。
stop slave;
reset master;
复制
启动从服务器复制功能
start slave;
查看从服务器状态
show slave status\G
#下面两个参数都是Yes,则说明主从配置成功!
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
测试,主机的testdb库都会及时同步过去
现在主库的表里没数据,添加一条
查看从库的数据,也存在了
到此一主一从的mysql主从复制就完成了。
mysql主从复制的优点:
1、数据更安全:做了数据冗余,不会因为单台服务器的宕机而丢失数据
2、性能大大提升:一主多从,不同用户从不同数据库读取,性能提升
3、扩展性更优:流量增大时,可以方便的增加从服务器,不影响系统使用
4、负载均衡:一主多从相当于分担了主机任务,做了负载均衡。