主从复制:
MySQL主从复制允许将来自一个数据库(主数据库)的数据复制到一个或多个数据库(从数据库)。主数据库一般是实时的业务数据写入和更新操作,从数据库常用的读取为主。
mysql同步原理:
主从复制过程:
1、主服务器上面的任何修改都会通过自己的 I/O tread(I/O 线程)保存在二进制日志 Binary log 里面。
2、从服务器上面也启动一个 I/O thread,通过配置好的用户名和密码, 连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个Realy log(中继日志)里面。
3、从服务器上面同时开启一个 SQL thread 定时检查 Realy log(这个文件也是二进制的),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。
二:搭建
windows下配置mysql主从复制(搭建主从的时候,遇到了一些坑,半天没解决,差点从入门到放弃了,吃了个饭,想了想,还是在看看,这一看不要紧,一看,发现主服务器里的my.ini配置的文件写的地方不对。my.ini里面有好几块呢。需要配置在[mysqld]这块下方)
(1)复制一个mysql,修改my.ini配置文件(修改这三处)
(2)mysql在windows下的启动mysql实例
mysqld install mysqls1 --defaults-file="D:\javasoft\mysql-8.0.16-winx64-cong\my.ini"
第二步:配置mysql主从(my.ini文件下中的[mysqld]下方配置)
1.配置主服务器
主从复制
设置server-id
server-id=1
binlog-format=ROW
开启二进制文件
log-bin=mysql-master-bin
slave更新时是否记录到日志中;
log-slave-updates=true
同步的数据库,除此之外别的不同步(和下面binlog-ignore-db二选一)
binlog_do_db=testdb
不同步的二进制数据库名,如果不设置可以将其注释掉;
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=personalsite
binlog-ignore-db=test
2.配置从服务器(my.ini文件下中的[mysqld]下方添加文件)
server-id = 2
log-bin=mysql-slave-bin
binlog-do-db=testdb //需要同步的数据库
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=personalsite
binlog-ignore-db=test
第三步:设置专门同步数据的账号
(1)在主服务器下(因为我使用的是8.0.16版本)
CREATE USER 'mysync'@'%' IDENTIFIED BY 'mysync';
GRANT replication slave ON . TO 'mysync'@'%' WITH GRANT OPTION;
flush privileges;
(2) 查看主服务器状态
show MASTER status;
(3)切换到从服务器配置
执行
CHANGE MASTER TO master_host = 'localhost',
master_user = 'mysync',
master_password = 'mysync',
master_log_file = 'mysql-master-bin.000005',
master_log_pos =155;
stop slave;
START slave;
(4)查看状态
show slave status;