作为一名PHP开发工程师,我想不管是在面试中还是在实际工作当中,我们不仅仅每天只是增删改查,if....else...那一套,我们应更深层的去学习PHP,学习MySQL,学习nginx ..........
那么在此仅作为学习MySQL主从复制分享一点点心得吧(往往我们听起来很高大上的东西,动手做起来其实简单的很,难则难在基本功)
首先我们应该在学习之前应掌握其原理所在,那么主从复制的原理,通俗来理解就是MySQL主服务器做什么事的同时从服务器也做该同样的事,两者保持一致,例如说:主服务说1加1等于2,那从服务就要同样说1加1等于2,但是与此同时呢,二者还需要建立一定的联系,才能进行握手通信,进行主从复制,也就是需要打开MySQL的二进制日志 binlog ,主服务器每次执行都会在binlog产生日志,从服务器相当于把主服务器的binlog读取过来,转化为自己可用的文件在自己的机器上执行一遍,(主从的执行间隔大约几十毫秒的样子,如果超过一秒基本是不能忍的),这样主从复制就完成了
下面就配置主服务器binlog;
一,
找到自己的数据库配置文件(一般是/etc/my.cnf ,当然要结合自己搭建环境的实际情况),
并开启二进制日志
log-bin=mysql-bin ,
接下来就是,二台服务器要建立起来联系,互相通信,那么就要为从服务器设置一个登陆主服务器的用户密码:
进入MySQL命令行执行:
mysql>grant replication slave on *.* to‘用户名’@’从服务器ip’ identified by ‘密码’;
刷新权限: mysql>flush privileges;
二,
查看主服务器二进制文件名与位置
mysql>show master status;
在从服务器告知主服务器二进制文件名与位置,故在从服务器执行
mysql>change master to
>master_host=’xxx.xxx.xx.xx’,
>master_user=’用户名’,
>master_password=’密码’,
>master_log_file=’二进制binlog文件名’,
>master_log_pos=xxx; #binlog文件位置偏移处
至此,就完成了主从配置
三,接下来就是测试是否成功,
mysql>slave start; #开启复制
mysql>show slave status\g #查看主从复制是否配置成功
(若有异常,此处会抛出),在我实验过程中,抛出了权限拒绝(root用户),解决方法是因为MySQL用户表中每个用户的权限是不一样的,故此指定MySQL登录用户,问题解决,
当看到Slave_IO_Running: YES、Slave_SQL_Running: YES 时,严重祝贺你一切顺利完成
四,进行实际测试,
先登陆主MySQL
mysql>show databases;
再登陆从MySQL
mysql>show databases;
-----------------------------------------------------
然后在主MySQL操作sql:
mysql>create database aa;
mysql>use aa;
mysql>create table tab1(id int auto_increment,name varchar(10),primary key(id));
mysql>show databases;
mysql>show tables;
在从服务器MySQL操作查看:
mysql>show databases;
mysql>show tables;
果然多了,一个aa库,并且在aa中有一张tab1表,与主MySQL保持了一致。