我想学习下主从复制,网上找了很多资源,过程很曲折,不得不说我还是挺佩服写教程专门写的让人看的不动的人的,我简单介绍下过程,中间尽量为每一步做好说明
主数据库的配置:
主数据库的配置比较简单,
1) 在配置文件中开启二进制日志
#开启二进制日志 #因为主从数据库之间就是通过 二进制日志同步的
log-bin = mysql-bin
2.1)声明需要同步的数据库名(必写,2.1和2.2选一个配置即可)
#只同步哪些数据库,除此之外,其他不同步
binlog-do-db = erio-test
binlog-do-db = erio
2.2)也可以声明哪些数据库不需要同步(一般建议用2.1的方法,只同步自己需要同步的即可)
# 不同步哪些数据库
# binlog-ignore-db = mysql
# binlog-ignore-db = test
# binlog-ignore-db = information_schema
3)设置server-id (每个mysql 程序的配置文件里server-id 必须不一样,也就是主库 和从库的server-id不能相同)
server-id = 1 #我把主库设置为1 从库设置为 非1 的数字即可
从库的配置:
在配置从库之前,如果主库有数据,需要先把主库的所有数据迁移到从库,需要知道的是,开启主从复制之后,主数据库的每一个操作都会同步到从数据库,但是不会自动同步主数据库之前已经存在的数据。简单梳理下就是 :主从复制开启之后,仅仅能保证两个数据库之后的操作是一样的。
所以将主数据库的数据和表结构迁移到从数据库是前提,一般可以利用数据库管理软件把表结构和数据迁移到从数据库,如果是Datagrip 的话就可以用如下方式,将数据 做成sql文本,在从库上运行即可,(在这之前,你需要将表先创建好),如果你爹数据库很可能在你备份数据之前有人访问,为了保证数据的一致性,最好先将数据库锁住,不允许更改
当主从数据库的数据保持一直后开始配置从数据库
主数据库 (注意,是主数据库下)下:
1)创建 一个用户(用于从库链接主库)
#修改成 WITH mysql_native_password身份验证插件
#'NAME' 用户名
#'%' 代表所有外网地址(可以设置成ip地址形式 也可以是localhost)
#'PASSWORD' 用户密码
CREATE USER 'NAME'@'%' IDENTIFIED WITH mysql_native_passwordBY 'PASSWORD';
2)给予复制主数据库的授权
# REPLICATION SLAVE 指 从数据库 复制主数据库的权限
# *.* 所有库所有表 (可以具体指定 如 database.table)
GRANT REPLICATION SLAVE ON *.* TO 'NAME'@'%';#分配权限
flush privileges; #刷新权限
3)运行show master status ;会得到二进制日志文件名 和 位置(Binlog_Do_DB是配置文件中配置需要同步的数据库,Binlog_Do_DB是不需要同步的数据库,我没有配置),记录下 file 字段 和 position字段
show master status ;
4) 在从库下:
# 从库链接主库(各个字段 就不必解释了)
#host ip地址
# user 用户名
# password 密码
#file 主库查询到的 file
#pos 主库查询到的position
CHANGE MASTER TO
MASTER_HOST ='0.0.0.0',
MASTER_USER ='name',
MASTER_PASSWORD ='961011',
MASTER_LOG_FILE ='mysql-bin.000001',
MASTER_LOG_POS =155;
5) 启动同步进程
# 启动同步进程
start slave;
至此,如果于一切正常,你修改主库中的数据,从库会响应改变
额外说明:
1 你可以查看 从库状态(需要关注下图两个状态都为Yes表示成功链接主库)
show slave status;
2 你可以停止同步
#停止同步
stop slave;
3 你可以在停止同步后删除同步信息
#删除所有同步信息
reset slave all;
4 你可以在主库中查看从库
show processlist;#查看从库
5 你可以主库中重制主库
reset master ;