原理介绍
MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的 二进制日志 功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制,然后再解析日志并应用到自身,最终实现 从库 的数据和 主库 的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。
二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL的主从复制, 就是通过该binlog实现的。默认MySQL是未开启该日志的。
MySQL复制过程分成三步:
1). MySQL master 将数据变更写入二进制日志( binary log)
2). slave将master的binary log拷贝到它的中继日志(relay log)
3). slave重做中继日志中的事件,将数据变更反映它自己的数据
配置
主库配置:
[mysqld] #开启二进制日志log-bin=mysql-bin#标识唯一id(必须),一般使用ip最后位server-id=1#不同步的数据库,可设置多个binlog-ignore-db=information_schemabinlog-ignore-db=performance_schemabinlog-ignore-db=mysql#指定需要同步的数据库(和slave是相互匹配的),可以设置多个binlog-do-db=test
添加日志存储方式和规则(选填)
#设置存储模式不设置默认binlog_format=MIXED#日志清理时间expire_logs_days=7#日志大小max_binlog_size=100m#缓存大小binlog_cache_size=4m#最大缓存大小max_binlog_cache_size=521m
重启数据库服务mysqld
service mysqld restart
登陆MySQL数据库允许从库获得主库日志
[root~]#mysql-uroot-p登陆#给从库放权限 mysql>GRANT FILE ON *.* TO 'root''192.168.0.2' IDENTIFIED BY 'root password'; #创建用户 mysql>GRANT REPLICATION SLAVE ON *.* TO 'root''192.168.0.2' IDENTIFIED BY 'root password'; #修改用户权限 mysql>select host ,user ,password from mysql.user; #查看是否修改成功 mysql>FLUSH PRIVILEGES; #刷新权限
重启MySQL服务,登录MySQL,查看主库信息
root~]#servicemysqldrestart#重启mysql服务[root~]#mysql-uroot-p#登陆mysqlmysql>showmasterstatus; #查看master状态##显示内容+------------------+----------+--------------+----------------------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+----------------------------------+-------------------+ | mysql-bin.000006 | 120 | ufind_db | information_schema,performance_schema,mysql | | +------------------+----------+--------------+----------------------------------+-------------------+ 1 row in set (0.00 sec)
注:如果执行这个步骤始终为Empty set(0.00 sec),那说明前面的my.cnf没配置对,请回去重新检查配置步骤。
配置从库
[root~]#vi/etc/my.cnf#开启二进制日志 log-bin=mysql-bin server-id=2 binlog-ignore-db=information_schema binlog-ignore-db=performance_schema binlog-ignore-db=mysql #与主库配置保持一致 replicate-do-db=test replicate-ignore-db=mysql log-slave-updates slave-skip-errors=all slave-net-timeout=60