mysql主从复制

1、读写分离(主从复制)php

至少两台数据库服务器,能够分别设置主服务器和从服务器,对主服务器的任何操做都会同步到从服务器上。 主要做用:分担压力,备份数据mysql

实现原理sql

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

首先登录主服务器须要分配一个帐户给从服务器 添加帐号(用户)命令以下:服务器

//受权帐户给xiaohei
grant  all  on   *.*   to ‘xiaohei’@’%’  identified  by ‘1234’

查看是否分配成功能够查看user表框架

select * from mysql.user

若是须要删除 命令以下:ide

drop user 'xiaohei'@'%'

都知道mysql是经过日志来实现同步的 那么如何区操做日志呢??函数

//首先须要配置my.conf 的log-bin日志文件 能够配置具体的路径
   log-bin=d:/log.bin   
//配置data-dir能够配置具体的数据存放的位置 
datadir="f:/log"

//生成新的日志文件 flush log
//清空所用的日志文件 reset master
//查看最后一个的日志文件 show master status 测试

那么如何查看记录在日志文件的内容呢??ui

mysqlbinlog --no-defaults 'd:/log.bin'

搭建主从服务器:

搭建主服务器:
在my.conf中设置 server-id =1 ,log-bin已经进行了配置了

帐户的受权:

grant replication slave on *.* to 'slave'@'%' identified by '1234';

clipboard.png

记录主服务器最新的二进制的名称和位置

show master status;

clipboard.png

注意:此时,就禁止对主服务器执行增删改的操做,一直到从服务器配置成功。

搭建从服务器

(1)开启二进制日志。

(2)要设置一个server_id 该值不能和主服务器的相同。

登录从服务器 而且中止

stop slave

配置语法:

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

clipboard.png

开启从服务器 执行start slave

查看是否配置成功
show slave status

clipboard.png

Slave_IO_Running:Yes 此进程负责从服务器从主服务器上读取binlog 日志,并写入从服务器上的中继日志。
Slave_SQL_Running:Yes 此进程负责读取而且执行中继日志中的binlog日志,
注:以上两个都为yes则代表成功,只要其中一个进程的状态是no,则表示复制进程中止,错误缘由能够从”last_error”字段的值中看到。、

读写分离的实现

'DB_RW_SEPARATE'=>true,//支持读写分离 
  'DB_MASTER_NUM'         =>  1, // 读写分离后 主服务器数量
  'DB_SLAVE_NO'      =>  '', // 指定从服务器序号,不填,查询时随机链接从服务器

具体的步骤:
(1)经过mysql受权帐号,
注意:受权的帐号,是给php代码链接的。
主服务器:192.168.12.253的主机受权帐号以下:

clipboard.png

从服务器:192.168.12.252的主机受权帐号以下:

clipboard.png

(2)步骤TP框架里面配置文件

clipboard.png

(3)在TP里面,测试读写分离的配置,

clipboard.png

clipboard.png

clipboard.png

经过测试发现,执行M()->query()时,是链接从服务器,执行 M()->execute()是链接主服务器。

视图

视图有两个好处:

一是能够简化sql,组建数据到视图 减小sql的查看
二是 能够权限控制 显示必要的数据

视图与表的关系
(1)视图是表的查询结果,天然表的数据改变了,影响视图的结果。
(2)若是向视图里面,添加数据,是否会影响到表里面的数据呢?
insert into it_goods_v1(goods_name,shop_price,goods_number) values('包菜',210,100);

clipboard.png

注意:视图的数据与表的数据一一对应时,能够修改视图里面的数据,若是不是一一对应的关系,不能修改,好比下图所示,想要修改平均价格。

clipboard.png

(3)对于视图insert还应注意,视图必须包含表中没有默认值的列。
理解:

create table it_user(
    id int primary key auto_increment,
    name varchar(32) not null,
    age decimal(9,2) not null,
    email varchar(32) not null
)engine myisam charset utf8;

clipboard.png

注意:在实际的开发中,没有对视图进行增删改的需求,建立视图,就是查询的。

几个mysql时间函数

unix_timestamp() //时间戳 from_unixtime(unix_timestamp()) //转换为日期格式 curdate() //今天的日期 //取出某个时间段的时间date_sub(时间日期时间,interval 数字 时间单位)

相关文章
相关标签/搜索