首先我们搭建mysql的主从复制。这里我使用的是云服务器(什么服务器都可以)和docke进行创建。由于我是在同一台虚拟机上所以映射了3307,3317两个端口号,通过端口区分。要是有多台虚拟机直接映射3306就行,通过ip区分。
mysql主节点创建:
docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql/master/log:/var/log/mysql \
-v /mydata/mysql/master/data:/var/lib/mysql \
-v /mydata/mysql/master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
vim /mydata/mysql/master/conf/my.cnf
配置以下内容:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
server_id=100
log-bin=mysql-bin
read-only=0
binlog-do-db=hxzn_sys
binlog-do-db=hxzn_admin
binlog-do-db=hxzn_oms
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
server-id:用于标识唯一的数据库
log-bin=mysql-slave-bin:开启二进制日志功能,以备Slave作为其它Slave的Master时使用
binlog-ignore-db:表示同步的时候ignore的数据库
binlog-do-db:指定需要同步的数据库
重新启动mysql-master
docker restart mysql-master
mysql从节点创建:
docker run -p 3317:3306 --name mysql-slaver-01 \
-v /mydata/mysql/slaver/log:/var/log/mysql \
-v /mydata/mysql/slaver/data:/var/lib/mysql \
-v /mydata/mysql/slaver/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
进入挂载目录配置从节点
vim /mydata/mysql/slaver/conf/my.cnf
配置以下内容:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
server_id=101
log-bin=mysql-bin
read-only=1
binlog-do-db=hxzn_sys
binlog-do-db=hxzn_admin
binlog-do-db=hxzn_oms
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
重启从节点:
docker restart mysql-slaver-01
这里我就不通过登录docker容器配置了,直接用工具进行连接。
两个都要连接成功
如果连接不上可以进入容器设置连接权限。别忘了开放端口号。
docker exec -it mysql-master /bin/bash
登录
mysql -uroot -p
创建远程登录权限(按照我的来不需要配置这一步,直接能登陆上),如果是已有的可以按照需求配置一下。
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
连接后新建查询
在查询中执行命令,创建从节点远程连接主节点用的账号密码
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456';
查看主节点状态
show master status
这就说明成功了
这里的 File 、Position 是在配置Salve的时候要使用到的,Binlog_Do_DB表示要同步的数据库,Binlog_Ignore_DB 表示Ignore的数据库,这些都是在配置的时候进行指定的。
记录一下file,position
从节点执行
如果登陆不上同上配置,再登陆不上就是你配错了。
配置 slaver 同步 master 数据
change master to master_host='47.98.250.300',master_user='backup',master_password='123456',master_log_file='mysql-bin.000013',master_log_pos=921,master_port=3307,master_connect_retry=30;
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
执行同步命令:
start slave;
查看同步状态
show slave status;
这个表有点长,就展示一部分了,只要这两个是yes就表示ok了。
如果出错了怎么办现在我演示以下出错的情况。
将上面的端口号改成错的执行命令
先停止同步(如果是重新改连接信息,都需要停止同步后才能进行)
stop slave;
同步连接(错误的)
change master to master_host='47.98.250.300',master_user='backup',master_password='123456',master_log_file='mysql-bin.000013',master_log_pos=921,master_port=3306,master_connect_retry=30;
开始同步
start slave;
查看同步状态
show slave status;
这里就变成no了,只要两个不都为yes都为出错。
表里还有个字段记录了报错信息
报错信息为:error connecting to master 'backup@47.98.250.300:3306' - retry-time: 30 retries: 1
这里就是说连接不上,你需要检查以下ip和端口号。其他的报错这四个字段都会显示
找错对应的报错,排除就好了。
这个时候就可以了再mysql-master创建一个数据库,从节点数据库就会同步了。
mysql分片存储,分库分表配置,请关注我其他的博客。这就先到这里了。