1.工作原理
上一篇文章讲过主服务器master 每次对数据库的修改操作都会 产生bin-log二进制文件 记录数据库的变更操作
从服务器slaveer 会监听到主服务器的变更 日志文件 将bin-log 文件拷贝到从服务slaver的中继日志文件relay-log中
从服务器重做中继日志文件中的事件 将日志文件写入自己的数据中 大体流程图如下:
2.主从配置
主服务器master的配置 上一篇文章有详细说过 主要的配置就是 在my.cnf中配置 server-id = 1 主服务器保证和slaver服务器不一样
log-bin=mysql-bin 开启bin-log日志文件
重启master服务器
切换的mysql命令行 输入 show master status; 打印bin 文件信息表示配置成功
从服务器slaver的配置(一) 注意此配置是mysql 5.5之前的配置 之后的版本这样配置无效 本次试验采用第二种配置方式
log-bin = mysql-bin
server-id=2(保证和主服务器不一样)
master-host=192.168.1.169(主服务器的ip)
master-user=root(访问主服务器的用户名)
master-password=password(访问主服务器的密码)
master-port=3306(访问主服务器的端口)
重启从服务器slave 首先要确保主服务器提供的用户名和密码从服务器能够访问
从服务器slaver的配置(二
) 注意此配置是mysql 5.5之后
的配置
因为之后的版本都不支持master-* 之类的参数了
但是同样需要在/etc/my.cnf 中配置以下参数
server-id=2(保证与主服务器不一致)
replicate-ignore-db = mysql(不复制默认的数据库mysql)
replicate-ignore-db = information_schema(不复制默认的数据库information_schema)
重启mysql 服务
其他的参数通过在msyql命令行去执行 也就是和配置一的效果达到的一样
到此还没配置完成
现在需要再主数据库master执行
即主服务器授权同步账户
GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.1.170%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
FLUSH PRIVILEGES;
root 链接到从数据库的用户名
192.168.1.170 为ip
password为密码
此时主从服务器 执行
stop slave;
reset stop;
start stop;
再在从服务器中执行 mysql 命令行中执行 show slave status \G;
查看是否配置成功列表
报错 UUIDs must be different 。。。错误
是因为server-id 相同因为是虚拟机克隆的
(有同学可能会说我不是配置了server-id 不一样的吗? show variable like ‘server_id’ 确实不一样 其实你查看 /var/lib/mysql 中的 auto.cnf 上面的uuid是和从服务器一样
mv ./auto.cnf ./auto.cnf.bk 重命名一下该文件
再重启 就不会报错了
)
3.检查配置是否成功
现在在mysql命令行输入 show slave status \G;
如果出现
则表明主从配置成功!
4.检查在主数据库插入数据从数据库是否能同步数据
在master数据库中插入数据 在slaver数据库中同样出现一条一样的数据
master数据插入数据:
查看从数据库slaver 中的数据是否同步:
至此已经全部完成了mysql主从复制的实验 下一篇文章将讲解 主从复制在spring + mybatis + springmvc中的读写分离实现