赞
踩
目录
主从复制过程中存在数据延迟问题,如果延迟在几毫秒左右还可以接受,如果延迟时间过长就会存在脏读问题
在学习Redis的时候,已经了解过主从复制的作用。在MySQL集群环境中,可以分为主节点与从节点,通过主从复制可以实现数据备份、故障转移、MySQL集群、高可用、读写分离等。 MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果。
- 主从复制是Mysql自带的功能、而读写分离需要依赖Mycat实现。 - Mycat和Nginx非常相似
- 从节点去同步主节点数据,而主节点不会去同步从节点中的数据。
引入:如果不小心将表数据删了,只需要执行一遍binLog二进制文件即可。
从库生成两个线程,一个I/O线程,一个SQL线程; i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中; 主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog; SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
服务器准备两台
192.168.212.201 (主Mysql)
192.168.212.202 (从Mysql)
vi /etc/my.conf ###在mysql配置文件中新增以下内容
server_id=201 ###服务器id(遵循规范取内网ip的最后三位)
log-bin=mysql-bin ###开启日志文件同步方式
重启mysql服务器:service mysql restart
验证是否配置成功:show variables like 'server_id%';
能查询到对应配置文件中的server_id说明已经配置成功
show master status;
能够看到“日志同步文件”、“和从哪行开始同步”说明已经配置成功、查询到的同步日志文件名称和同步行数需要给从节点配置同步时使用
克隆主控服务器
vi /etc/my.conf ###在mysql配置文件中新增以下内容
server_id=202 ###服务器id(遵循规范取内网ip的最后三位)
log-bin=mysql-bin ###开启日志文件同步方式binlog_do_db=test ###需要同步的数据库,多个用逗号分隔
重启mysql服务器:service mysql restart
验证是否配置成功:show variables like 'server_id%';
能查询到对应配置文件中的server_id说明已经配置成功
从节点同步主节点配置
方式一(全部同步):
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='连接Navicat的ip',
MASTER_PORT=正确的端口,
MASTER_USER='正确的用户名',
MASTER_PASSWORD='正确的密码';
START SLAVE;
CHANGE MASTER TO
MASTER_HOST='192.168.75.144',
MASTER_PORT=3306,
MASTER_USER='slave',
MASTER_PASSWORD='slave';
START SLAVE;
方式二(选择主库同步位置进行同步)
### 同步配置说明:master_host需要同步的主节点地址,master_user主节点账号,master_password主节点密码,master_log_file同步的二进制文件,master_log_pos同步行数
master_host='192.168.212.201',
master_user='root',
master_password='root',
master_log_file='mysql-bin.000172',
master_log_pos=154
### 开始同步
start slave;
### 检查从服务器复制功能状态, 如果使用克隆服务的话,mysql同步可能会失败,根据以下方式解决
SHOW SLAVE STATUS;
- 在查询从服务器复制状态时,如果Slave_IO_Running字段为No时,表示同步失败,查看last_IO_Error字段报错说明进行解决;
-- 例如last_IO_Error字段内容: Fatal error:The slave I/O thread stops because master and slave have equal MySQL server UUIDs; ......
该错误问题是因为服务器克隆时UUID重复导致的(从服务和主服务的UUID重复导致);
解决:
cat /etc/my.cnf -- 在配置文件中查看mysql的数据存放在哪个目录
datadir=/var/lib/mysql -- 日志、数据、UUID等文件都在该目录中存放
cd /var/lib/mysql
rm -rf auto.cnf -- 删除auto.cnf文件或手动修改UUID,auto文件中存放的就是UUID,表示该mysql服务的唯一性
重启mysql服务即可:service mysqld restart
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。