一. 主从复制原理如下图
二. 环境搭建前准备工作
准备条件:2台Mac电脑,通过虚拟机都装有Centos7,首先在给2个Centos7系统装好Mysql8.0,安装方法见我前面的文章。
Mac-A的Centos地址为192.168.1.103,为主数据库。
Mac-B的Centos地址为192.168.1.106,为从数据库。
因为我们这边的linux系统是装在虚拟机上的,为了实现主从复制,首先确保192.168.1.103和192.168.1.106主机能够ping通。
(0)设置虚拟机网络为wifi模式,这样的话就可以分配到192.168.1.X的ip地址,同时连入局域网中了。
(1) 关闭两台linux机器的防火墙
查看状态:systemctl status firewalld
停止firewall:systemctl stop firewalld.service
禁止firewall开机启动:systemctl disable firewalld.service
(2)开3306端口,并且写入注册表
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save 保存到注册表中
成功写入返回数据:iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
(3) 测试两台机器是否可以通信
在主机中:ping 192.168.1.106,看下是否有数据返回。
在从机中:ping 192.168.1.103,看下是否有数据返回。
三. 主数据库配置
vim /etc/my.cnf 添加以下字段:
完整的my.cnf内容cat /etc/my.cnf:
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
pid-file=/data/mysql/mysql.pid
log-error=/data/mysql/error.log
tmpdir=/tmp
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
#主服务器唯一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
启动mysql:service mysql start 显示:Starting MySQL SUCCESS!
登录mysql:cd /usr/local/mysql/bin
./mysql -u root -p
给从机创建授权登录:create user 'slave'@'192.168.1.106' identified by '123456';
use mysql;
查询授权过的用户:select host,user from user;
修改权限
GRANT ALL PRIVILEGES ON *.* TO 'slave'@'192.168.1.108' WITH GRANT OPTION;
FLUSH PRIVILEGES; 刷新,使其生效
显示主机状态:show master status; 这里可以拿到主机日志文件名以及日志当前位置
#记录下File和Position的值
#执行完此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化
四. 从机数据库配置
1. 授权帐号密码验证
在从机上终端里试验下主机授权给的帐号密码是否可用,可以用的话,就代表之前在主机上给从机的授权是OK的。
cd /usr/local/mysql/bin
./mysql -u root -p
./mysql -u slave -p -h 192.168.1.103
123456
2. 从机vim /etc/my.cnf配置信息
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
pid-file=/data/mysql/mysql.pid
log-error=/data/mysql/error.log
tmpdir=/tmp
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
# 修改配置文件:vim /etc/my.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
3. 启动从机mysql,并执行mysql命令
启动从机数据库:service mysql start 显示:Starting MySQL SUCCESS!
登录从机mysql:cd /usr/local/mysql/bin
./mysql -u root -p
#在从机mysql中执行下面的命令
#复制主机的命令
CHANGE MASTER TO MASTER_HOST='192.168.1.103',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=481;
#启动从服务器复制功能
start slave;
#查看从服务器状态 show slave status\G; 如下:(数据比较多,显示方便,/G代表列显示)
五. 主从复制测试【主机新建库、新建表、insert 记录,从机复制】
在主机上创建一个数据库testDB,创建一个表,同时插入数据:
create database testDB;
create table mytable(id int, name varchar(20));
insert into mytable values(1, 'zhangsan');
此时查看从机数据,就可以看到刚刚在主机上创建的数据库和表数据已经自动的被复制到从机mysql中来,如下:
如何停止从服务复制功能 stop slave;
启动从机:start slave;
重制从机:reset slave;
如何重新配置主从: stop slave;
reset master;
以上就是主从数据库同步的环境搭建。