环境说明:
主数据库:
Windows7-MySQL5.5
从数据库:
Linux(CentOS7.0)-MySQL5.7
配置实现:一主(写主机)一从(读主机)
区别Redis:
相同点:都只有一台主机,可以有多台从机。
不同点:
Redis
是从头复制,MySQL
是从接入点复制;
Redis
是计时的,MySQL
是延时的!
笔记大纲
-
主从复制的基本原理
-
主从复制的基本原则
-
主从复制的最大问题
-
一主一从常见配置【12步骤】
1.主从复制的基本原理
(1)slave会从master读取binlog来进行数据同步。
(2)复制三步骤
master
将改变记录到二进制日志(binary log
)。这些记录过程叫做二进制日志事件,binary log events
;
slave
将master
的binary log events
拷贝到它的中继日志(relay log
);
slave
重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL
复制是异步的且串行化的。
2.主从复制的基本原则
(1)每个slave
只有一个master
(读主机);
(2)每个slave
只能有一个唯一的服务器ID;
(3)每个master
可以有多个salve
(写主机)。
3.主从复制的最大问题
存在延时,如果做了读写分离,当我们插入后数据,不要立刻去读,否则读的数据是空,因为从数据库还来不及复制,复制需要时间(毫秒级)。
4.一主一从常见配置
(1)mysql版本一致且后台以服务运行(在这里我的是不一致的!)
(2)主从都配置在[mysqld]结点下,都是小写
(3)主机修改my.ini配置文件
server-id=1
log-bin=E:/(001)DevelopSoftware/MySQL5.5-log/data/mysqlbin
binlog-ignore-db=mysql
binlog-do-db=mydb_1024
binlog_format=STATEMENT
主服务器唯一ID
server-id=1
启用二进制日志
log-bin=自己本地的路径/data/mysqlbin #[自己本地的路径/data]\mysqlbin是文件
设置不要复制的数据库
binlog-ignore-db=mysql#配置文件中数据库名不要写大写,MySQL数据库不能区分
设置需要复制的数据库(注意:此时不要新建数据库、表!)
binlog-do-db=需要复制的主数据库名字
设置binlog的格式
binlog_format=STATEMENT(默认)
格式 | 优点 | 缺点 |
---|---|---|
STATEMENT (声明模式) | 效率高 | 不能识别函数,会造成主从数据复制数据不一致 |
ROW (行模式) | 不记录写操作的SQL, 记录执行完SQL每一行的改变(主从复制数据一致) | 批量操作,效率低 |
MIXED | 对插入语句进行判断,有函数,切入到行模式;没有函数,就基于写的操作 | 识别不了MySQL中@@ host name <系统变量> |
(4)mysql主从复制起始时,从机不继承主机数据
(5)从机配置文件修改my.cnf的[mysqld]栏位下
在Linux中输入命令 :
cd /etc/
vim my.cnf
server-id=2 #注意符号间无空格
relay-log=mysql-relay
(6)因修改过配置文件,请主机+从机都重启后台mysql服务
重启主机windows–MySQL5.5
重启主机linux-MySQL5.7
(7)主机从机都关闭防火墙
windows手动关闭
关闭虚拟机linux防火墙 systemctl stop firewalld
(8)在Windows主机上建立帐户并授权slave
提示:如果步骤(9)查询从机状态不符合要求,则直接执行步骤(11)(12),重新配置!!!
GRANT REPLICATION SLAVE ON *.*
TO ‘codinglin’@‘从机器数据库IP’ IDENTIFIED BY ‘123456’;
GRANT all privileges ON *.* TO 'slave1024'@'%' IDENTIFIED BY '1234'; #授权并创建用户
查询master的状态
show master status;
记录下File和Position的值
执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化!!
(9)在Linux从机上配置需要复制的主机
配置Linux上配置主从相关信息
#DOS窗口ifconfig查看[以太网适配器 VMware Network Adapter VMnet8]:IPV4地址的值
CHANGE MASTER TO MASTER_HOST='192.168.XXX.XX',
MASTER_USER='zhangsan',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysqlbin.具体数字',MASTER_LOG_POS=具体值;
启动从服务器复制功能
start slave;
查看从机状态
show slave status\G #(下面两个参数都是Yes,则说明主从配置成功!)
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
(10)主机新建库、新建表、insert记录,从机复制(配置成功)
CREATE DATABASE mydb_1024;
CREATE TABLE mytbl(ind INT,`name` VARCHAR(20));
INSERT INTO mytbl VALUES(1,'daxia');
SELECT * FROM mytbl;
windows-主数据查看插入数据:
linux- 从数据库查看插入数据:
(11)停止从服务复制功能
stop slave;
(12)重新配置主从
reset master;
☞本人博客:https://coding0110lin.blog.csdn.net/ 欢迎转载,一起技术交流吧!