数据库MySql主从分离配置CentOS7

版权声明:廖圣平博客,未经博主允许不得转载。企鹅:1194008361 https://blog.csdn.net/qq_22823581/article/details/85708674

介绍:

主从的优势:

  1. 将读操作和写操作分离到不同的数据库上,避免主服务器出现性能瓶颈;
  2. 主服务器进行写操作时,不影响查询应用服务器的查询性能,降低阻塞,提高并发;
  3. 数据拥有多个容灾副本,提高数据安全性,同时当主服务器故障时,可立即切换到其他服务器,提高系统可用性;

主从的缺点:

从网上找了一些资料:
Mysql主从缺点:
但主从机制是一样的:
mysql主从的实现是,mysql master被使用后,其中master后台IO线程会写Binlog;slave有一个Relay Log线程同步binlog日志,同时有另一个Extractor线程会读取相应的Binlog,在Slave进行相应的同样的操作。
对于主从正常执行,相应的延迟几乎是不存在的。但是在高QPS下,主从同步却出现了比较明显的延迟情况。在PPT介绍中,当master QPS达到1万左右时,Slave重做的QPS却只有2000左右,因此所谓的瓶颈其实是在Binlog日志在slave重做这块。而此处实现是单线程的,因此改进的方法此处用多线程实现。

PPT中介绍淘宝实现,修改了源码,对应的机制是Transfer机制:此处通过对Binlog日志重做采用多线程实现,从而提高slave的QPPS,PPT给出的实验数据按此机制实现后,QPS能达到1万多。从而解决mysql主从之间高QPS下的数据同步问题。
当然使用此机制对应的mysql相关配制也有一定的要求:
1.Binlog日志格式必须是基于ROW级别的,
2.对应的SQL语句必须对应PK或者uni key。

对于以上两点,作者解析是基于多线程必须是知道PK或者uni key才能完成相应的多线程重做slave,这样才能保证SQL语句的执行顺序。相对来说,对于第二点很多应用需求还是能满足。但是对ROW日志格式,对于一些批量修改等应用,采用此日志格式所带来的DB的IO压力等应该也是需要考虑的。

毕竟一种新的方案的提出有它的优点也有它的缺点,合适才是最合理的。总的来说此PPT是围绕此方案的实现在讲解,很易懂。
原文

开始

两台服务器里面的mysql 数据结构要一样。
数据库如何外网访问:点击查看

主服务器:

文件: /etc/my.cnf 如下配置

    [mysqld]
	server-id=1
	log-bin=master-bin
	log-bin-index=master-bin.index

重启mysql
命令:

show master status;

在这里插入图片描述
出现图中的信息,之后主数据库配置就可以不要改了。
添加用户并授权给slave

说明: repl用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为mysql。说明一下192.168.0.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.0.0-192.168.0.255的Server都可以以repl用户登陆主服务器。当然你也可以指定固定Ip。
 mysql>create user repl; //创建新用户
 mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'mysql';

从服务器:

配置 my.cnf

       [mysqld]
       log-bin=mysql-bin   //[不是必须]启用二进制日志
       server-id=2      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

重启数据库
登录mysql帐号,执行:

change master to master_host='192.168.0.104', //Master 服务器Ip
master_port=3306,
master_user='repl',
master_password='mysql', 
master_log_file='mysql-bin.000017',//Master服务器产生的日志 刚刚主服务器中的 File
master_log_pos=49529;   //这边要注意了,刚刚主服务器中的 Position

开启:start slave;

到此就结束了,接下来找如果不顺利的话就要根据错误提示,找bug了;

验证

判定主从是否配置成功;红框里面的两个都要yes;

show slave status\G

在这里插入图片描述

问题

如果报错,类似:
Last_Error: Error ‘Table ‘splier.wait_work’ doesn’t exist’ on query。。。
则是主从的数据库不一致所导致的,要使两个数据库一致。重新设置postion的值

从机:
错误:The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it)

show variables like 'server_id';  //查看当前的id 如果你发现,这个server 和你配置中的不一样。如果一样,则不要看下去了
set global server_id=2;   //改成你刚刚配置的一致
slave start;  //重启

参考:

MySQL同步故障:" Slave_SQL_Running:No" 两种解决办法
http://120.79.143.216:8888/99297233

猜你喜欢

转载自blog.csdn.net/qq_22823581/article/details/85708674