前提
两台服务器互相能ping通另一台,mysql版本要一致且服务要运行,下图是主从复制的流程图
MySQL复制过程分成三步:
- master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;
- slave将master的binary log events拷贝到它的中继日志(relay log) ;
- slave重做中继日志中的事件,将改变应用到自己的数据库中,MySQL复制是异步的且串行化的
主机配置
注意:一个主机(master)可以对应多个从(slave)
[mysqld]
server-id=1 #必须主服务器ID唯一
log-bin=mysql-bin #启用二进制日志文件
read-only=0 #主机读写都可以
binlog-ignore-db=mysql #设置不要复制的数据库
binlog-do-db=设置需要复制的主数据库名字 #设置需要复制的数据库
log-err=/var/log/mysql/mysqlerr #启用错误日志(配置可选)
basedir=/usr #根目录(可选)
temdir=/tmp #临时目录(可选)
datadir=/var/lib/mysql #数据库目录(可选)
从机配置
#这个是丛集配置
[mysqld]
server-id=2 #修改服务器id,因为主机id=1,所以要修改从机的id
log-bin=mysql-bin #启用二进制日志文件
注意:主机从机配置完成后,要关闭防火墙,且都要重启mysql服务
主机上建立账户并授权slave
mysql>grant replication slave on *.* to "用户名"@"从机数据库ip" identified by '密码';
mysql>flush privileges;
#允许从机以用户名和密码进行复制主机数据
- 查询主机的状态
mysql>show master status; #记下file和position的值
File = mysql-bin.000237 Position =353
从机上配置需要复制的主机
mysql>change master to master_host="ip",master_user="主机授权的用户名",master_password="主机授权的密码",master_log_file="主机File文件名",master_log_pos=主机Position值;
mysql>slave start; #配置从服务器的复制功能
mysql>show slave status;
mysql>slave stop;#配置从服务器关闭复制功能