前期准备:两台Linux,一主一从,具体Linux安装MySQL操作步骤如上
1、主从复制简介
#主从复制的原理(核心:二进制日志)
1、master将数据库改变的数据记录在本地的二进制日志(binary-log)中
2、通过I/O线程将master的二进制日志(binary-log)拷贝到slave的中继日志(relay-log)中
3、通过SQL线程将将slave的中继日志(relay-log)读取到本地的数据库中
#主从复制的作用
1、主数据库出现问题,可以切换到从数据库
2、可以进行数据库层面的读写分离:在主数据库写入数据,从从数据库读取数据,降低I/O访问率
3、可以在从数据库上进行日常备份
2、配置主服务器
#配置数据库(Windows的配置文件是my.ini)
vi /etc/my.cnf
#在[mysqld]下添加如下内容:
# 启用二进制日志
log-bin=master-bin
# 服务器唯一ID,一般取IP地址最后一段
server-id=215
#1同步忽略的数据库(根据实际情况)
binlog-ignore-db=mysql
#(可选)或者 同步数据库的名称(根据实际情况)
binlog-do-db=test
#重启数据库
systemctl restart mysqld.service
#主服务器必须开放防火墙
firewall-cmd --zone=public --add-port=3306/tcp --permanent
#重载防火墙
firewall-cmd --reload
#查看防火墙已开放端口
firewall-cmd --list-all
#连接数据库查看
mysql -uroot -p
#查看是否配置成功
mysql> show master status;
#主机给从机授备份权限slave(从机ip可以是具体ip,也可以是固定的网段,也可以是任意%)
GRANT REPLICATION SLAVE ON *.* TO '从机MySQL用户名'@'从机ip' identified by '从机MySQL密码';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'test'@'192.168.80.%' identified by '123';
#刷新权限
mysql> flush privileges;
配置成功后(成功会在安装目录下生成日志文件:master-bin.000001和master-bin.index)
3、配置从服务器
#配置数据库(Windows的配置文件是my.ini)
vi /etc/my.cnf
#在[mysqld]下添加如下内容:
# 启用二进制日志
log-bin=slave-bin
# 服务器唯一ID,一般取IP地址最后一段
server-id=221
#重启数据库
systemctl restart mysqld.service
#连接数据库查看
mysql -uroot -p
#选择主服务器:master_user为同步操作的数据库账户,master_log_file为:show master status中的File值,master_log_pos为:position的值
mysql> change master to master_host='192.168.80.215',master_user='root',master_password='123',master_port=3306,master_log_file='master-bin.000001',master_log_pos=843;
#开启主从同步
mysql> start slave;
#查看从服务器状态(Slave_IO_Running和Slave_SQL_Running都为yes,则开启为成功)
mysql> show slave status \G
#注意:当出现错误时,数据库查看日志,默认日志路径:/var/log/mysqld.log
#停止主从同步
mysql> stop slave;
#问题:
Last_SQL_Error: Error 'Unknown table 'test.user'' on query. Default database: 'test'. Query: 'DROP TABLE `user` /* generated by server */'
#解决:
由于主从数据不一致,需要把主从的数据库全部删除,重新开启主从同步