小白实战 ———— 数据库主从复制!!!
数据库主从复制
|-实现原理
mysql中有一种日志,叫做bin日志(二进制日志),会记录下所有修改过数据库的sql语句。主从复制的原理实际是多台服务器都开启bin日志,然后主服务器会把执行过的sql语句记录到bin日志中,之后从服务器读取该日志,在从服务器再把bin日志中记录的sql语句同样的执行一遍。这样从服务器上的数据就和主服务器相同了。
|-准备
2台服务器,本次用线上服务器(阿里云服务器)作为主服务器,线下本地服务器(PC端wamp)作为从服务器
|-主服务器的操作
- 首先,创建一个账号,为了简化,授权所有权限,这个账号主要是从库连接主库时需要用到的。
数据库控制台命令:
语法:grant 权限 on 数据库.数据表 to ‘用户名’@’ip地址’ identified by ‘密码’
比如:
grant all on *.* to ‘xiaohei’@’%’ identified by ‘123456’;
我是用navicat for mysql软件连接的
也可以用宝塔面板操作,直接在phpadmin里面创建,(懒得敲,哈哈)
——点击权限,然后添加用户
- 做一些配置,最重要的是在数据库配置文件里修改添加
打开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
好了,主服务器到这里基本完成,不要动主服务的数据库,增删改查都不要操作,不然位置就会改变。
|-从服务器的操作
- 从服务器的配置
和主服务器一样,开启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框架里面的数据库配置中修改下
前一个是主服务的配置,后一个是从服务器的配置
我是在模块下新建了个数据库配置,方便测试
- 在TP中写上一个增,一个查找操作
增加数据 线上服务器数据库
本地从服务器数据库
查找时,可以通过看数据库日志来确定是哪一个服务器查找的
注意:使用mysql安装目录下面的bin目录下面mysqlbinlog命令,来查看日志内容。
mysqlbinlog --no-defaults 二进制日志的名称(全路径)
线上要注意,如果出现no command ,则需要映射```这块我也没搞懂,
线下要注意权限 我也没搞懂,SHIT
差不多就是这样了,希望大家能给个赞,哈哈哈