今天创建使用了一下MySQL主从数据库,个人感觉就是,SQL一分为二主从执行,毕竟一行数据的增加,从数据库也会增加。这和定时备份数据又完全不同。实时将数据备份一份,但功能是否仅局限于备份呢?今天刚开始使用,如果真是能保证数据的一致性。那么主从做读写分离,减轻服务器的压力的也可以
下面开始就记录一下过程:
准备2个数据库
对两个数据库进行连接。
在这个过程中,需要在my.ini或linux的my.cnf?这两个文件,更改各自端口以及各自的数据存储路径以及基础路径。
对新建的库进行初始化,mysqld --initialize-insecure
对这两个MySQL服务进行连接:主数据库3306,从数据库3307
以下是在主库进行操作:
在主数据库使用命令:
GRANT REPLICATION SLAVE ON *.* TO 'daomu'@'127.0.0.1'IDENTIFIED BY 'mysql';
这句话的意思是,许可复制到从数据,进行允许赋值。后面是复制的域,指定谁能来复制,否则谁都能掺一脚?指定用户,IP以及密码,最后那是密码,此时查看user表
主表增加了一个用户
SHOW MASTER STATUS;
语义应该是,显示主分之的状态,我们需要留意的状态有,file以及position
以下是从库的操作:
stop slave;
CHANGE MASTER TO
MASTER_HOST='127.0.0.1', #主库分配的地址
MASTER_USER='daomu', #主库分配的用户
MASTER_PASSWORD='mysql', #主库分配的密码
MASTER_LOG_FILE='mysql-bin.000002', #主库的file
MASTER_LOG_POS=1015; #主库的位置编号
START SLAVE;
stop slave; 停止,应该是停止与主库的从属关系
中间一溜是对主库的描述
START SLAVE;,开始与主库建立从属关系
SHOW SLAVE STATUS\G
查看从属状态:
可以检查以下配置是否OK,注意这两个地址,当都为yes时,表示主从配置成功了。之前我将密码配置错误,slave_io就为conn...需要注意这两个为yes则OK
主从配置完毕,检查效果:
主从的复制关系,是从建立上关系开始的。之前有的是没有复制到从库的,现在从库只有几个被初始化的库,现在开始测试:
主库创建数据库,从库也跟着就增加了
主库增加数据,并查询得到数据。查询从库,也一并进行了数据插入,也能查询得到数据
这就是主从库目前提现的效果。可以说是主从一起更新。不过我有猜想,这个关系应该是基于网络传输的,如果网络断开,但关系保持。会怎么样?当网络正常,但主配置错误,会怎么样?不过目前效果已经提现出来了。
运行了一会就同步不上了,再次查看状态,运行为no了,出现的异常是表格不存在。
情况是,测试删除从库表格,主库继续操作表格,这时应该来同步从库,从库要执行的操作,是修改表格数据。但表格都没有了,出现错误。后续的更新也都停止了
测试可以针对这种错误的解决办法是:
mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
#客户端运行,用来跳过几个事件,只有当同步进程出现错误而停止的时候才可以执行。
mysql> start slave ;
主从,主库进行操作,从库也会操作。如果是针对从库操作,主库再次来操作,发现有问题异常出现,就停止更新数据了。读写分离应该是,写主库,更新从库,就读从库。主从关系大概是这样的。操作主库,读取从库。实现分离
在这里,主更新,从也更新。大体的配置如下:
1:主许可数据允许复制,并创建用户做身份验证
2:主查询自己的状态,得到file与position
3:从根据主创建的用户,在自己身上配置一份
4:开启主从关系,并查看自己的状态,通过状态得到关系是否建立成功
5:当都为yes时,主从库关系建立成功,数据