介绍
复制是指将主数据库的DDL 和 DML 操作通过 二进制日志 传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。
优势
MySQL 复制的有点主要包含以下三个方面 :
主库出现问题,可以快速切换到从库提供服务。 (备用数据库)
可以在从库上执行查询操作,从主库中更新,实现读写分离,降低主库的访问压力。 (用于读写分离)
可以在从库中执行备份,以避免备份期间影响主库的服务。
操作
描述:
①、准备 2 台服务器Centos7,IP地址分别为 192.168.3.18 (主)、192.168.3.19 (备)
②、2台服务器上都安装好 MySQL 服务, MySQL版本 ——MySQL-5.6.46
master (主库)
修改配置文件
在 mysql 的配置文件中的[mysqld]下 添加,如下配置:
# mysql 服务ID,保证整个集群环境中唯一
server-id=1
# mysql binlog 日志的存储路径和文件名
log-bin=/var/lib/mysql/mysqlbin
#是否只读,1 代表只读, 0 代表读写
read-only=0
# 忽略的数据, 指不需要同步的数据库
binlog-ignore-db=mysql
注意:如果是使用 rpm 方式安装的 mysql,那默认的配置文件:/usr/my.cnf , 如果是源码安装的话, 配置文件可能在:/etc/my.cnf
重启 mysql 服务
service mysql restart
创建同步数据的账户,并且进行授权操作
grant replication slave on *.* to 'root'@'192.168.3.19' identified by '654321';
flush privileges;
查看master状态
show master status;
slave (从库)
修改配置文件
在 slave 端配置文件中,配置如下内容 :
#mysql服务端ID,唯一
server-id=2
#指定binlog日志
log-bin=/var/lib/mysql/mysqlbin
重启 mysql 服务
service mysql restart
登录 mysql , 执行如下指令
change master to master_host= '192.168.3.18', master_user='root', master_password='654321', master_log_file='mysqlbin.000001', master_log_pos=408;
注意:这里用到了 master 中的状态值
开启同步操作
start slave;
show slave status;
注意:
停止同步操作 :
stop slave;
验证同步操作
在主库中创建数据库,创建表,并插入数据 :
create database db01;
use db01;
create table user(
id int(11) not null auto_increment,
name varchar(50) not null,
sex varchar(1),
primary key (id)
)engine=innodb default charset=utf8;
insert into user(id,name,sex) values(null,'Tom','1');
insert into user(id,name,sex) values(null,'Trigger','0');
insert into user(id,name,sex) values(null,'Dawn','1');
可能遇到问题
通过 rpm 方式安装 mysql 数据库, 登录时提示需要用户名和密码
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
操作:
①、查看密码
cat /root/.mysql_secret
②、使用密码登录
mysql -uroot -p
③、设置新密码
set password = password('654321');
④、授权远程登录
grant all privileges on *.* to 'root' @'%' identified by '654321'
flush privileges;
mysql 远程连接不上,防火墙的问题
在 Centos7 中默认防火墙 firewalle,将防火墙改为iptables
安装 iptables
yum -y install iptables-services iptables
禁用/停止自带的firewalld服务
#停止firewalld服务
systemctl stop firewalld
#禁用firewalld服务
systemctl mask firewalld
查看 iptables 的状态
service iptables status
关闭 iptables 防火墙
service iptables stop
注意:关闭了防火墙,然后使用 mysql 客户端工具(navicat)测试一下是否能连接上数据库
编辑 iptables 入栈规则
vi /etc/sysconfig/iptables
重启 iptables 服务即可生效
service iptables restart