1. 复制的基本原理
1)slave 会从 master 读取 binlog 来进行数据同步
2)MySQL 复制过程分为三步:
- master 将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;
- slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
- slave 重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL 复制是异步的且串行化的。
2. 复制的基本原则
- 每个 slave 只有一个 master
- 每个 slave 只能有一个唯一的服务器 ID
- 每个 master 可以有多个 salve
3. 复制的最大问题
延时
4. 一主一从常见配置
下面来搭建一个 mysql Windows 下为主机,虚拟机下为从机的主从复制。
1)mysql 版本一致且后台以服务运行
linux 和 window 下的 mysql 最好版本一致。
window 下查看版本:登录就去其实它就可以看到版本了。实在要查,命令 status 或者 select version(); 都可。
查看两边 ip,然后 ping 连接看网络是否互通。
window:
linux:
2)配置文件
主从都配置在 [mysqld] 结点下,都是小写
①windows 下,主机修改my.ini配置文件
- [必须]主服务器唯一ID:server-id=1
- [必须]启用二进制日志:log-bin=自己本地的路径/data/mysqlbin 如:log-bin=D:/devSoft/MySQLServer5.5/data/mysqlbin
- [可选]启用错误日志:log-err=自己本地的路径/data/mysqlerr 如: log-err=D:/devSoft/MySQLServer5.5/data/mysqlerr
- [可选]根目录:basedir="自己本地路径" 如:basedir="D:/devSoft/MySQLServer5.5/"
- [可选]临时目录:tmpdir="自己本地路径" 如:tmpdir="D:/devSoft/MySQLServer5.5/"
- [可选]数据目录:datadir="自己本地路径/Data/" 如:datadir="D:/devSoft/MySQLServer5.5/Data/"
- read-only=0 :主机,读写都可以
- [可选]设置不要复制的数据库 :binlog-ignore-db=mysql
- [可选]设置需要复制的数据库:binlog-do-db=需要复制的主数据库名字
②liux下:从机修改my.cnf配置文件
- [必须]从服务器唯一ID
- [可选]启用二进制日志
vim /etc/my.cnf
因修改过配置文件,请主机+从机都重启后台 mysql 服务
3)主机从机都关闭防火墙
windows手动关闭
关闭虚拟机linux防火墙 : service iptables stop
4)在Windows主机上建立帐户并授权 slave
①GRANT REPLICATION SLAVE ON *.* TO 'zhangsan'@'从机器数据库IP' IDENTIFIED BY '123456'; (这句话的意思就是:授权给从机,允许从机以“zhangsan”的账户登录,密码为“123456”来登录主机。)
②写入命令之后刷新一下:flush privileges;
③查询master的状态:show master status;
记录下 File 和 Position 的值
执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
5)在Linux从机上配置需要复制的主机
CHANGE MASTER TO MASTER_HOST='主机IP',MASTER_USER='zhangsan',MASTER_PASSWORD='123456',MASTER_LOG_FILE='File名字',MASTER_LOG_POS=Position数字;
启动从服务器复制功能:start slave;
show slave status\G:
下面两个参数都是Yes,则说明主从配置成功!
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
6)主机新建库、新建表、insert记录,从机复制
7)如何停止从服务复制功能
stop slave;