Mysql 主从复制原理
master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志。slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志,SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。
配置master主服务器
在Master MySQL上创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步
repl用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为mysql。说明一下192.168.0.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.0.0-192.168.0.255的Server都可以以repl用户登陆主服务器。当然你也可以指定固定Ip。找到MySQL安装文件夹修改my.ini文件在[mysqld]下面增加下面几行代码server-id=1 //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾log-bin=mysql-bin查看日志
重启 Mysql 服务
配置slave从服务器
找到MySQL安装文件夹修改my.ini文件在[mysqld]下面增加下面几行代码server-id=2relay-log-index=slave-relay-bin.indexrelay-log=slave-relay-bin重启MySQL服务连接Master
change master to master_host='192.168.19.71, //Master 服务器ip
master_port=3306,
master_user='repl',
master_password='mysql',
master_log_file='master-bin.000001',//Master服务器产生的日志
master_log_pos=0;//Master服务器产生的日志的位置
3. 启动Slave
4. 查看slave的设置是否正确
在这里主要是看:Slave_IO_Running=Yes Slave_SQL_Running=Yes
主服务器用命令查看: show binary logs;
然后去从服务器上查看哪个二进制正在使用
我们看到mysql-tb-bin.000005这个日志文件正在使用。
回到主服务器开始清理日志,但是不能清理mysql-tb-bin.000005这个日志文件,用命令清理:
purge binary logs to 'mysql-tb-bin.000005';
这个命令就是清理除mysql-tb-bin.000005以外的其他二进制日志;执行成功后,再查看二进制日志列表:show binary logs;
清理成功,但是这样手动清理危险很大,而且还比较复杂,有没有自动清理的方法呢?答案是有的,在my.ini里面加上这个配置:expire_logs_days=5 这个配置的意思就是,日志的过期天数,超过5天的日志,mysql会自动清理5天以前的日志,这样就不用再担心日志文件文件越来越大的问题了