MySQL主从复制
AB主从复制:简称AB复制,在A主机上做create、update、insert、drop、delete等数据库、表、记录的增、删、改操作,B主机上会自动做数据库、表、记录的同步更新。AB复制的工作原理(即工作过程):1. 在主库上把数据更改记录到二进制日志(Binary Log)中。2. 备库将主库上的日志复制到自己的中继日志(Relay Log)中。3. 备库读取中继日志中的事件,将其重放到备库数据库之上。AB复制的一主一从模式工作过程:A主机: create database db1 ----> 会将此命令自动写入本机的二进制日志文件中B主机: I/O线程 监测并读A主机上的二进制日志文件新增的内容,且将新内容写入到B主机自己的中继日志文件中SQL线程 读取B主机上中继日志文件中心的SQL语句,并且自动执行这些SQL语句。最终在B主机上创建了db1这个库。网络拓扑:(1主1从)mysql主服务器(master主人):192.168.11.11mysql从服务器(slave随从、奴隶):192.168.11.12项目准备:(在master、slave主机上分别做如下操作)0.[选做]。安装mariadb-server服务器端软件、mariadb客户端软件,启动mariadb服务,查mariadb服务端口号3306。yum install -y mariadb-server mariadbsystemctl restart mariadblsof -i :3306 或 netstat -atunlp | grep :33061.停止master、slave主机上的mariadb服务,并且清空/var/lib/mysql的所有数据。systemctl stop mariadbrm -rfv /var/lib/mysql/*2.重启master、slave主机上的mariadb服务。并且查库、test库中是否有表(无表就OK)。systemctl restart mariadbmysql -uroot -e 'show databases;use test;show tables;'AB复制的配置思路:1.在A主机(master)上的/etc/my.cnf主配置文件中开启binlog二进制日志文件功能,并且给主机设置server-id唯一标识编号。重启mariadb服务。2.在A主机上创建用于AB主从复制的用户账号,并查看master状态中的binlog日志文件的position位置数值。3.在B主机上的/etc/my.cnf主配置文件中设置server-id唯一标识编号。。重启mariadb服务。4.在B主机上用help change master查命令帮助,并用change master命令告诉B主机他的master主人的正确信息。5.在B主机上用start slave启动mariadb的随从服务,并用show slave status查看AB主从复制的数据同步状态,要确认两个线程的yes状态。AB复制的配置实施:1.在A主机(master)上的/etc/my.cnf主配置文件中开启binlog二进制日志文件功能,并且给主机设置server-id唯一标识编号。重启mariadb服务。vim /etc/my.cnf 做如下修改[mysqld] 找到此行,添加如下蓝色字的3行功能选项server-id=11 指定server-id为11,通常用本机IP的最后一组数log-bin=master-bin 添加此行,指定二进制日志文件名为master-binskip_name_resolv=1 跳过域名解析功能重启mariadb服务:systemctl restart mariadb2.在A主机上创建用于AB主从复制的用户账号,并查看master状态中的binlog日志文件的position位置数值。mysql -uroot -e "grant replication slave on *.* to 'rep'@'192.168.11.%' identified by 'rep';"mysql -uroot -e 'select user,host,password from mysql.user;mysql -uroot -e 'reset master;show master status;'3.在B主机上的/etc/my.cnf主配置文件中设置server-id唯一标识编号。重启mariadb服务。vim /etc/my.cnf 做如下修改[mysqld] 找到此行,添加如下蓝色字的3行功能选项server-id=12 指定server-id为12,通常用本机IP的最后一组数#log-bin=slave-bin 添加此行,指定二进制日志文件名为slave-binskip_name_resolv=1 跳过域名解析功能重启mariadb服务:systemctl restart mariadbmysql -urep -prep -h192.168.11.11 -e 'status;' 测试rep用户是否能远程访问master主机的数据库服务4.在B主机上用help change master查命令帮助,并用change master命令告诉B主机他的master主人的正确信息。mysqlhelp change master to;CHANGE MASTER TOMASTER_HOST='192.168.11.11',MASTER_USER='rep',MASTER_PASSWORD='rep',MASTER_PORT=3306,MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=542,MASTER_CONNECT_RETRY=10; //是指从和主连不上是重试连接的时间为10秒金老师的环境:CHANGE MASTER TOMASTER_HOST='10.31.165.5',MASTER_USER='rep',MASTER_PASSWORD='rep',MASTER_PORT=3306,MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=542,MASTER_CONNECT_RETRY=10;5.在B主机上用start slave启动mariadb的随从服务,并用show slave status查看AB主从复制的数据同步状态,要确认IO和SQL两个线程的yes状态。mysql -uroot -pstart slave;show slave status\G 注: \G 是分组(group)显示信息。注:change master to设置的信息默认保存在/var/lib/mysql/master.info文件中,relay中继日志的设置信息默认保存在/var/lib/mysql/relay-log.info文件中。ls /var/lib/mysql/cat /var/lib/mysql/master.infocat /var/lib/mysql/relay-log.infocat /var/lib/mysql/mysql.sock 此套接字设备文件无法查看,是正常现象5.测试主从复制的数据同步。首先,在A主机(192.168.11.11)上创建一个名称为db1的库,并查库。mysqlcreate database db1;show database;SHOW PROCESSLIST; 查mysql的内部进程(即线程)清单然后,在B主机上查库,看到了db1库,说明AB主机的数据自动同步成功。mysql -uroot -e 'show databases;'附加练习:实现AB主从复制的双主架构(互为主从)。实现思路如下:首先:A主的操作(1) -----> B从的操作(2)然后:A从的操作(4) <----- B主的操作(3