一、什么是主从复制至少两台数据库服务器可以分别设置主服务器和从服务器对主服务器的任何操作都会同步到从服务器上二、实现原理mysql中有一种日志叫做bin日志二进制日志会记录下所有修改过数据库的sql语句。主从复制的原理实际是多台服务器都开启bin日志然后主服务器会把执行过的sql语句记录到bin日志中之后从服务器要读取这个bin日志把该日志的内容保存到自己中继日志里面从服务器再把中继日志中记录的sql语句同样的执行一遍。这样从服务器上的数据就和主服务器相同了。实现的技术是用户的授权和log-bin日志的开启。三、用户授权1、添加一个用户给用户授权查看当前数据库下面的用户情况。grant 权限名称select update delete on 数据库名.表名 to ‘用户名’’主机’ identified by 密码例如说明授权的用户xiaolong只能在192.168.10.120的主机上面登录只对user库user表执行select update delete操作。grant select update delete on user.user to xiallong192.168.10.120 identified by 123452、如果删除一个用户drop user ‘用户名’’主机’四、log-bin日志1、如何开启log-bin日志打开mysql.ini的配置文件创建的log-bin日志文件。2、如何 查看log-bin日志里面的内容。使用一个命令mysqlbinlog --no-defaults 日志的文件名及路径log-bin记录sql语句的格式位置3、log-bin日志相关的一些命令操作flush logs 产生一个新的log-bin日志reset master :清空以前的log-bin日志并产生一个新的log-bin日志show master status; 查看最新的一个log-bin日志包括最新的pos位置。4、使用bin-log日志完成一个案例恢复数据的一个案例步骤1新建一张表create table nihao(id int);2flush logs 产生一个新的log-bin日志文件insert into nihao values(1000)insert into nihao values(2000)insert into nihao values(3000)3flush logs产生一个新的log-bin日志文件。4delete from nihao5要求恢复数据比如一个家公司在上午9:00备份了一次数据。到9:30时由于员工的误操作则把所有的数据都给删除了。要求要恢复数据到9:30.比如如下要求恢复数据思路打开log-bin日志文件进行分析。查找insert语句的pos位置。根据pos位置来恢复数据使用如下的参数--start-pos”开始的pos点”--stop-pos’结束的pos点’五、主从配置1、配置主服务器1主和从服务器都要开启log-bin日志每台服务器设置一个唯一的server-id的值。并重启服务器。2要给从服务器授权一个用户该用户授予复制权限。grant replication slave on *.* to ‘xiaoming’’%’ identified by ‘12345’3要查看主服务器里面log-bin日志的名字和pos位置。(停止对主服务器的操作)show master status;2、配置从服务器1执行stop slave停止从服务器2具体的配置change master to master_host’主服务器的ip’,master_user’授权的用户名’,master_password”授权的密码”,master_log_file’log-bin日志文件的名称’,master_log_pospos位置3开启从服务器start slave4查看从服务器的状态show slave status;Slave_IO_Running:Yes此进程负责从服务器从主服务器上读取binlog 日志并写入从服务器上的中继日志。Slave_SQL_Running:Yes此进程负责读取并且执行中继日志中的binlog日志注以上两个都为yes则表明成功只要其中一个进程的状态是no则表示复制进程停止错误原因可以从”last_error”字段的值中看到。3、如何撤销从服务器1stop slave2reset slave all六、读写分离实现在程序层次进行设计class mysql{$dbm主服务器$dbs1从服务器$dbs2从服务器public function query(){在query里面进行语句判断分析连接不同的mysql服务器。如果是查询则随机连接两台从服务器如果是修改操作则连接主服务器}}tp框架支持读写分离DB_DEPLOY_TYPE1,//分布式数据库支持DB_TYPE mysql, // 数据库类型DB_HOST localhost,192.168.3.250, // 服务器地址DB_NAME php,php, // 数据库名DB_USER root,xiaogang, // 用户名DB_PWD root,1234, // 密码DB_PORT 3306, // 端口DB_PREFIX ,DB_RW_SEPARATEtrue,//支持读写分离验证select语句是操作从 服务器insert 语句是操作的主服务器