主从复制原理及数据库搭建
主从同步原理:就是当主库当中有数据更新时,它会把这个数据存到主库的二进制文件里面,然后从库去拷贝二进制文件到自己的中继日志里面,将主库里面的数据拷贝,进行同步更新。
搭建主库:
(1)克隆一台服务器。修改机器名和ip映射,固定ip和安全机制。然后重启服务器。
(2)
//创建data,mysql,master01 文件 mkdir /data/mysql/master01 -p //进入这些文件 cd /data/mysql/master01 mkdir cong data 然后cd.. 返回上一个目录 -R 包括父目录和子目录 chmod 777 * -R
3 创建配置文件
cd /data/mysql/master01/conf vim my.cnf //这里你也可以使用 vi命令进入这个文件 //如果不想用的话,你也可以去下载 vim 这个命令 vim跟vi是一样的用法,它是vi 的一个扩展的文本编辑器 //下载命令 yum install vim 进入这个文件之后,配置集群参数 [mysqld] log-bin = mysql-bin #指定主库 serverid server-id=1 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISI ON_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' //记得把空格去掉
4 创建容器
看一下你的这个虚拟机里面有没有docker 容器,如果没有就下载一个docker容器
安装新版Docker 1 使用curl升级到最新版 curl -fsSL https://get.docker.com/ | sh 2 重启Docker systemctl restart docker 3设置Docker开机自启 systemctl enable docker 4测试Docker 版本 docker --version 5 上传daemon.json到/etc/docker中 6重启docker service docker restart
5 创建容器
docker create --name percona-master01 -v /data/mysql/master01/data:/var/lib/mysql -v /data/mysql/master01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
6 启动
docker start percona-master01 && docker logs -f percona-master01
打开Navicat数据库连接
选中你的数据库右击--选中命令列面
create user 'kgc'@'%' identified by 'kgc'; grant replication slave on *.* to 'kgc'@'%'; //都能访问主库的kgc用户 flush privileges; //使配置有效
7 重新启动
docker restart percona-master01 && docker logs -f percona-master01
8 查看master状态
show master status;
9 查看二进制日志相关的配置项
show global variables like 'binlog%';
10 查看server 日志的相关配置项
show global variables like 'server%';
如果你的这些日志里面都没有内容,那就说明你的环境搭建是有问题的。
搭建从库
还是在主库的基础上去搭建从库
1 创建目录 mkdir /data/mysql/slave01 cd /data/mysql/slave01 mkdir conf data chomd 777 * -R 2 创建配置文件 cd /data/mysql/slave01/conf vim my.cnf 3 输入一下内容 [mysqld] server-id=2 #服务 id,不可重复 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_B Y_ZERO ,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 4 创建容器(如果没有docker容器的话,要去创建docker容器) docker create --name percona-slave01 -v /data/mysql/slave01/data:/var/lib/mysql -v /data/mysql/slave01/conf:/etc/my.cnf.d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23 5 启动 docker start percona-slave01 && docker logs -f percona-slave01 6 连接数据库。设置master的相关信息 配置模式
set sql_mode = '';
set sql_mode = 'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES';
在查询窗口中输入 下面配置信息
CHANGE MASTER TO master_host='192.168.115.188', //主库的ip地址(主库和从库是同一个ip地址) //下面的都是主库的信息 ,因为要跟主库进行一个关联 master_user='kgc', master_password='kgc', master_port=3306, master_log_file='mysql-bin.000002', //主库的二进制文件信息 master_log_pos=648; //主库的二进制文件在数据库中的偏移量
启动同步
start slave;
查看master状态
show slave status
测试 Slave_IO_Running:Yes Slave_SQL_Running:Yes 必须要这两个列的值为yes才可以
主从同步: 当我在主库中添加数据时,子库中的数据和主库中的时候,实时保持一致
(主从同步,用来备份数据,提高安全性)