小白实战 ———— 数据库主从复制!!!

数据库主从复制

|-实现原理

mysql中有一种日志,叫做bin日志(二进制日志),会记录下所有修改过数据库的sql语句。主从复制的原理实际是多台服务器都开启bin日志,然后主服务器会把执行过的sql语句记录到bin日志中,之后从服务器读取该日志,在从服务器再把bin日志中记录的sql语句同样的执行一遍。这样从服务器上的数据就和主服务器相同了。

 

 

|-准备

2台服务器,本次用线上服务器(阿里云服务器)作为主服务器,线下本地服务器(PC端wamp)作为从服务器

 

|-主服务器的操作

  1. 首先,创建一个账号,为了简化,授权所有权限,这个账号主要是从库连接主库时需要用到的。

数据库控制台命令:

语法:grant  权限  on 数据库.数据表  to  ‘用户名’@’ip地址’   identified  by ‘密码’

比如:

grant  all  on   *.*   to ‘xiaohei’@’%’  identified  by ‘123456’;

我是用navicat for mysql软件连接的

 

 

  也可以用宝塔面板操作,直接在phpadmin里面创建,(懒得敲,哈哈)

——点击权限,然后添加用户

 

  1. 做一些配置,最重要的是在数据库配置文件里修改添加

打开mysql的配置文件,

window下面    my.ini

linux下面      my.cnf

 

咋们用的是linux,所以直接打开my.cnf

 

宝塔面板里面,也可以直接打开mysql里面的配置文件修改

 

一般在[mysqld]  下面添加server-id = 1;  //代表主服务器编号

                        log-bin = mysql-bin  //代表开启日志记录

 

注意:修改完成mysql的配置后,要重启mysql服务,切记不需要重启apache

 

/****************/

————顺带说说日志一些操作

flush logs;  执行该命令,就会产生一个新的log-bin日志  

 

reset master;   清空所有的log-bin日志,并产生一个新的log-bin日志

 

show master status;  查看最后(新)的一个log-bin日志这个最重要,等下从服务器连接时需要用到主服务器日志地址

/****************/

 

然后便是记录日志的位置和文件名,这里是107,mysql-bin.000001

 

好了,主服务器到这里基本完成,不要动主服务的数据库,增删改查都不要操作,不然位置就会改变。

 

|-从服务器的操作

  1. 从服务器的配置

 

和主服务器一样,开启log-bin和server-id = 2

 

我这里是本地服务器,wamp环境下的,打开my.ini文件

 

然后打开本地数据库控制台,首先关闭从服务

 

/****************************/

————这里再提一下

stop slave;  //关闭从服务器

 

start slave;  //开启从服务器

 

reset slave;  //重置清空从服务器

/*******************************/

 

停止从服务器

执行,stop   slave  指令即可。

 

配置的语法:

change master to master_host=”主服务器的ip地址”,master_user=”授权用户的名称”,master_password=”授权用户的密码”,master_log_file=”二进制日志文件的名称”,master_log_pos=记录的pos位置;

 

change master to master_host="59.110.63.90",master_user='xiaohei',master_password='123456',master_log_file="mysql-bin.000010",master_log_pos=5037;

 

 

change master to

master_host=”59.110.63.90”,master_user=’xiaohei’,master_password=’123456’,master_log_file=”mysql-bin.000001”,master_log_pos=107;

成功后 执行start slave指令即可。

 

查看是否配置成功

执行show slave status;

 

这2个是yes,就说明OK了

/******************************/

Slave_IO_Running:Yes

此进程负责从服务器从主服务器上读取binlog 日志,并写入从服务器上的中继日志。 

Slave_SQL_Running:Yes

此进程负责读取并且执行中继日志中的binlog日志, 

注:以上两个都为yes则表明成功,只要其中一个进程的状态是no,则表示复制进程停止,错误原因可以从”last_error”字段的值中看到。

/******************************/

 

注意测试时,2边的数据库要相同,然后主库(阿里云服务器)里面的增删改查,都会同步到本地里的

 

 

|-TP框架里的读写分离

Tp框架里面如何实现主服务器写,从服务器读呢?

 

1.准备2个帐号,一个是主服务器上的,就用刚才的xiaohei,从服务上也新建一个,但是只能有读的权限

 

然后在TP框架里面的数据库配置中修改下

 

前一个是主服务的配置,后一个是从服务器的配置

 

我是在模块下新建了个数据库配置,方便测试

 

 

  1. 在TP中写上一个增,一个查找操作

 

增加数据   线上服务器数据库

 

 

 

本地从服务器数据库

 

 

 

查找时,可以通过看数据库日志来确定是哪一个服务器查找的

 

注意:使用mysql安装目录下面的bin目录下面mysqlbinlog命令,来查看日志内容。

 

mysqlbinlog    --no-defaults     二进制日志的名称(全路径)

 

 

 

线上要注意,如果出现no command ,则需要映射```这块我也没搞懂,

线下要注意权限   我也没搞懂,SHIT

 

 

 

差不多就是这样了,希望大家能给个赞,哈哈哈

 

 

 

 

 

 

 

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页