一:核心原理

mysql 从库变主库 mysql从库可以写吗_mysql

  • 在目前互联网行业中,用户绝大多数的操作都是在对数据进行“读”操作,“写”操作相对较少。为了更好的利用数据库资源与解决用户量多了之后带来的数据库瓶颈问题,就有了读写分离的数据库集群模式,主库(master)用于写操作,从库(slave)用于读操作,由于写操作相对较少,所有主库不需要太多,可以增加从库的方式来提升数据库的。
  • 执行流程:主库中在写操作的事务提交之后会将该操作存入Binarylog文件中,并启动一个线程(异步的)将该文件的内容发送给从库从库的线程接收到内容之后会将该内容写入Realylog文件中去,从库还存在一个SQL线程,该线程负责将Relaylog文件中的内容取出放入数据库中执行。此过程中Relaylog文件起到了类似缓存队列的作用。
    实际应用:一主多从、二主多从等等。

二:搭建MySQL数据库集群(读写分离)

环境:CentOS6.8服务器、mysql5.6.47。

2.1 初始化配置
Linux下的安装mysql数据库命令:yum -y install mysql-server,
首次直接通过mysql -uroot进入命令行
设置密码:

set password for root@127.0.0.1=password('你需要设置的密码');
set password for root@localhost=password('你需要设置的密码');

注:配置文件默认是/etc/my.cnf。

2.2 配置数据库

  1. 配置主服务器的Binary log和从服务器的Realy log。
    1.1 进入mysql的配置文件(默认是在/etc/my.cnf)中进行配置,如下。
#master cnfig
server-id=1 
log-bin=master-bin
log-bin-index=master-bin.index
#slave config
server-id=2
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
2.2 进入master数据库的命令行界面,输入show master status命令查看状态。

mysql 从库变主库 mysql从库可以写吗_sql_02

2.3 在主库中配置从库连接的许可信息(用户名和密码,并授权)
#创建用户
create user repl;
#授权(REPLICATION SLAVE权限名称,*.*能操作当前数据库的所有库的表。用户名是刚才创建的repl)
grant REPLICATION SLAVE ON *.* TO '用户名'@'从库的主机IP' IDENTIFIED BY '密码';
2.4 在从库中配置要连接的主库
change master to master_host='主库的主机IP',master_port=主库的端口号,master_user='用户名(步骤2.3中设置的用户名)',master_password='密码',master_log_file='步骤2中查询出来的File(master-bin.000001)',master_log_pos=0;
2.5 在从库中开启主从跟踪,输入命令:start slave;
	
	2.6 在从库中查询从库的状态,输入命令:show slave status \G; 如果有错误的话则不会主从同步。

	2.7 其他命令:从库中停止同步 stop slave。

注:注意服务器的防火墙,如果相应的端口没有开发的话,主从复制会失败。