一、定义
主从复制就是建立一个和主数据库完全一样的数据库环境,称为从数据库
二、作用
1、主数据库服务器出现故障后,从数据库可以继续提供服务
2、架构的扩展,业务量越来越大,I/O访问频率过高,单机无法满足,做多库的存储,降低磁盘I/O访问的频率,提高单个服务器的I/O性能
3、读写分离,使数据库支持更大的并发
三、原理
1、数据库有个bin-log的二进制文件,记录了所有的sql语句
2、将主数据库的bin-log文件的sql语句复制到从数据库
3、让从数据库的relay-log重做日志文件中再执行一次这些sql语句
具体围绕三个线程去操作:
主数据库创建一个线程发送二进制文件,从库中,创建一个I/O线程去请求读取主库里的二进制文件,读取之后,创建一个sql线程去执行
四、构建
1、Master主服务器的配置(ip:xx.xx.xx.x1)
a、编辑my.cnf(命令:find / -name my.cnf)
在[mysqld]中注释掉 bind-address = 127.0.0.1 不然mysql无法远程
#bind address = 127.0.0.1
注释掉 binlog_do_db 和 binlog_ignore_db ,则表示备份全部数据库
重启数据库
b、登录主服务器mysql创建从服务器用到的账号和权限
grant replication slave on *.* to 'masterbackup' @'xx.xx.xx.x2' identified by 'masterbackup;
新建密码为masterbackup的masterbackup 用户,并赋予replication slave 权限
c、查看主数据库的状态
记录file和position,编写以下命令
change master to master_host='xx.xx.xx.x1',master_port=3306,master_user='masterbackup',master_password='masterbackup',master_log_file='mysql-bin.000007',master_log_pos=276;
2、Slave从服务器配置上的配置(xx.xx.xx.x2)
a、编辑my.cnf(命令查找文件位置:find / -name my.cnf)
在[mysqld]中
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
重启mysql服务器
b、重启
登录mysql,停止同步命令,stop slave,执行以下命令
change master to master_host='xx.xx.xx.x1',master_port=3306,master_user='masterbackup',master_password='masterbackup',master_log_file='mysql-bin.000007',master_log_pos=276;
重启数据同步 start slave
五、存在的问题
主从不同步的问题,从数据库读的延迟问题,优酷的解决方案是数据库分片,可以参考以下链接了解
读延迟问题解决方案