主从复制
Mysql数据库主从复制的实现
原理:主服务器执行的任何增删改查mysql服务器都会记录一个日志文件(a-bin.log),通过网络手段从服务器拿到a-bin.log文件之后就会执行相应的操作(前提是数据库结构是一致的)
环境的介绍:
系统环境:centos7
数据库:mysql5.7.3
xshell版本:6.0
xftp版本:6.0
服务器:192.168.1.117(主) 192.168.1.118(从)
一、下载cenos7镜像
http://101.206.167.169:9990/mirrors.aliyun.com/centos/7/isos/x86_64/
我下载的是最小安装:CentOS-7-x86_64-Minimal-2003.iso
二、安装完成配置静态IP
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3,保存
配置完成:wq保存退出,重启网卡:systemctl restart network
三、安装mysql5.7
准备安装包mysql-5.7.30-1.el6.x86_64.rpm-bundle.tar上传到虚拟机
##查询有没有安装,有安装需要卸载掉,然后手动删除
rpm -qa | grep mariadb
rpm -qa | grep mysql
##卸载
rpm -e --nodeps mariadb-libs-5.5.65-1.el7.x86_64
##创建压缩目录
mkdir mysql
##解压mysql包
tar -vxf mysql-5.7.30-1.el6.x86_64.rpm-bundle.tar -C ./mysql
##安装
rpm -ivh mysql-community-common-5.7.30-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.30-1.el6.x86_64.rpm
rpm -ivh mysql-community-client-5.7.30-1.el6.x86_64.rpm
rpm -ivh mysql-community-server-5.7.30-1.el6.x86_64.rpm
warning: mysql-community-server-5.7.30-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
原因:这是由于yum安装了旧版本的GPG keys造成的
重新执行:rpm -ivh mysql-community-server-5.7.30-1.el6.x86_64.rpm --force --nodeps(force:强制安装,nodeps:安装时不检查依赖关系)
##启动mysql
systemctl start mysqld
##myql安装会默认密码,查看密码
cat /var/log/mysqld.log |grep password
##mysql登录
mysql -uroot -p
##mysql重置密码,先关闭验证,需要打开配置文件
vi /etc/my.cnf
##添加
validate_password=off
##重启一下mysql
systemctl restart mysqld
##重置密码
alter user 'root'@'localhost' identified by '123456';
#再次刷新系统权限表
flush PRIVILEGES
##重新登录,显示数据库,表示已经重置成功
#创建测试数据库
create database ddm;
use ddm;
create table user(id int not null primary key,name varchar(50));
四、主服务器的配置
进入mysql编辑
vi /ect/my.cof
#添加的内容
#日志文件的名字
log_bin=master-a-bin
#日志文件的格式
binlog-format=ROW
#服务器的id(zk的集群),一定要是唯一的
server-id =1
#对应需要实现主从复制的数据库
binlog_do_db=ddm
#添加完之后需要登录主服务器给从服务器授权(192.168.1.%:1以后的服务器)
grant replication slave on *.* to 'root'@'192.168.1.%' identified by '123456';
#刷新系统权限表
flush PRIVILEGES
#修改完需要重启mysql服务
service mysqld restart
#查看主服务器的状态,出现下图,说明主服务器已经配置成功
mysql>show master status;
#名词解释
File 生成的日志文件名
Position 文件名所处的一个位置(偏移量)
Binlog_Do_Db 需要实现主从复制的数据库
#给客户端授权
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option ;
#还需要解决正在连接中的问题(因为还连接不上)
#一般navicat客户端连接不上
#1.防火墙 2.端口未开放 3.未授权
#退出数据库连接,可以开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
#重新加载防火墙
firewall-cmd --reload
五、配置从服务器,配置mysql
vi /ect/my.cof
#添加的内容
#日志文件的名字
log_bin=master-a-bin
#日志文件的格式
binlog-format=ROW
#服务器的id(zk的集群),一定要是唯一的
server-id =2
#双主互相备份(表示从服务器可能是另外一台服务器的主服务器)
#log-slave-updates=true
3、验证主从复制
#添加完成需要重启mysql(主从)服务器
service mysqld restart
#查看主服务器的状态,出现下图,说明主服务器已经配置成功
mysql>show master status;
#设置从服务器如何找到主服务器,设置主从复制的日志和偏移量
change master to master_host='192.168.1.117',master_port=3306,master_user='root',master_password='123456',master_log_file='master-a-bin.000002',master_log_pos=3140;
#启动slave的数据同步
start slave;
#出现下图表示已经连接成功,已经实现主从复制了
show slave statusG;
验证数据是否同步
主服务器创建表
从服务器也有数据,说明已经实现主从同步了: