参考文章:
https://www.cnblogs.com/gl-developer/p/6170423.html
1.原理


1. 在slave服务器上执行start slove命令开启复制开关,开始主从复制
2. Slave的IO线程会从在maste上已经授权的复制用户权限请求连接master服务器,并执行行binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行changemaster命令指定的)之后开始发送binlog日志内容
3. Master服务器接收到来自Slave服务器的IO线程的请求后,其上负责复制的IO线程会根据Slave服务器的IO线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的IO线程。返回的信息中除了binlog日志内容外,还有在Master服务器端记录的IO线程。返回的信息中除了binlog中的下一个指定更新位置。
4. 当Slave服务器的IO线程获取到Master服务器上IO线程发送的日志内容、日志文件及位置点后,会将binlog日志内容依次写到Slave端自身的Relay Log(即中继日志)文件(Mysql-relay-bin.xxx)的最末端,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取master端新binlog日志时能告诉Master服务器从新binlog日志的指定文件及位置开始读取新的binlog日志内容
5. Slave服务器端的SQL线程会实时检测本地Relay Log 中IO线程新增的日志内容,然后及时把Relay LOG 文件中的内容解析成sql语句,并在自身Slave服务器上按解析SQL语句的位置顺序执行应用这样sql语句,并在relay-log.info中记录当前应用中继日志的文件名和位置点
作用
1. 做数据的热备,作为后备数据库。主数据库服务器出故障后,可切换到从数据库继续工作,避免数据丢失
2. 读写分离,使数据能够支持更大的开发。在报表中尤为重要。由于部分报表的sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。
3. 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
环境搭建
一.环境介绍
.主数据库:139.199.20.195 直接是lamp集成环境
从数据库:39.105.105.250 直接是lnmp集成环境
二.主数据库配置
1.修改数据库配置文件my.cnf文件(我的是在/etc/my.cnf),在[mysqld]部分插入如下两行:
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id
2.重启mysql,然后在主数据库服务器上创建用于同步从数据库的从数据库用户账号
mysql> create user'cmysqlu'@'39.105.105.250' IDENTIFIED BY 'cmysqlp';#创建用户
Query OK, 0 rows affected (0.39 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO'cmysqlu'@'39.105.105.250';#给复制的权限
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;#刷新权限
Query OK, 0 rows affected (0.08 sec)

3.查看master状态,记录二进制文件名(mysql-bin.000011)和位置(107)
mysql> show MASTER STATUS;

三.从数据库配置
1.修改mysql配置,找到my.cnf文件,改变server-id,然后重启
[mysqld]
server-id=2 #设置server-id,必须唯一
2.打开mysql会话,执行同步sql语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):
mysql> CHANGE MASTER TO
-> MASTER_HOST='139.199.20.195',
-> MASTER_USER='cmysqlu',
-> MASTER_PASSWORD = 'cmysqlp',
-> MASTER_LOG_FILE='mysql-bin.0000009',
-> MASTER_LOG_POS=107;
Query OK, 0 rows affected (0.01 sec)
3.启动slave同步进程
mysql> start slave;
4.查看slave状态
mysql> show slave status\G;

四.测试
主数据库

从数据库:

知识点:
1.查看mysql错误日志
show variables like '%log_error%';

2.查看server-id
show variables like 'server_id';

3.centos7中如果用mysql远程连接的话要在防火墙开启3306端口
iptables -I INPUT -p tcp -m state --state NEW -m tcp--dport 3306 -j ACCEPT

3186

被折叠的 条评论
为什么被折叠?



