介绍
MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另
一台MySQL数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MvSOL主从
复制是MvSOL数据库自带功能,无需借助第三方工具。
MySQL复制过程分成三步:
- master将改变记录到二进制日志 (binary log)
- slave将master的binary log拷贝到它的中继日志 (relay log)
- slave重做中继日志中的事件,将改变应用到自己的数据库中
MySQL主从复制配置-前置条件
提前准备好两台服务器,分别安装Mysq1并启动服务成功
主库 Master 192.168.138.100
从库 slave 192.168.138.101
配置-主库Master
-
修改Mysql数据库的配置文件/etc/my.cnf
[client] default_character_set=utf8 [mysqld] collation_server = utf8_general_ci ## 设置mysql编码格式 character_set_server = utf8 log-bin=mysql-bin #[必须]启用二进制日志 server-id=100 #[必须]服务器唯一ID
-
重启Mysql服务
systemctl restart mysqld
-
登录Mysql数据库,执行下面SQL
-- 此操作建议在linux控制面板操作 SHOW VARIABLES LIKE 'character%'; ## 查看mysql的字符编码 SHOW VARIABLES LIKE 'validate_password%'; set global validate_password_policy=LOW; set global validate_password_length=4; CREATE USER 'fwy'@'%' IDENTIFIED BY 'fwy123456'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'fwy'@'%'; show grants for 'fwy'@'%';
注:上面SQL的作用是创建一个用户xiaobin,密码为Root@123456,并且给xiaobin用户授予REPLICATION SLAVE权限。常用于建立复制
时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。
-
登录Mysql数据库,执行下面SQL,记录下结果中File和Position的值
show master status;
注:上面SQL的作用是查看Master的状态,执行完此SOL后不要再执行任何操作
配置-从库Slave
-
docker安装mysql
docker pull mysql:5.7 docker run -d -p 3307:3306 --privileged=true -v /liqb/mysql/log:/var/log/mysql -v /liqb/mysql/data:/var/lib/mysql -v /liqb/mysql/conf:/etc/mysql/conf.d -eMYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
-
新建my.cnf,通过容器卷同步给mysql容器实例
[root@iZbp14ttq0poskby0niorcZ ~]# cd /liqb/mysql/conf [client] default_character_set=utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8 server-id=101 #[必须]服务器唯-ID
-
登录Mysql数据库,执行下面SQL
change master to master_host='121.199.52.197', master_user='fwy', master_password='fwy123456', master_log_file='mysql-bin.000001', master_log_pos=154, master_port=3306, master_connect_retry=30; start slave;
-
重启Mysql服务
docker restart mysql mysql -uroot -p123456
-
登录Mysql数据库,执行下面SQL,查看从数据库的状态
show slave status;