介绍:
现在mysql集群基本上都是使用一主多从方式,实现读写分离(主库写、从库读)、负载均衡、数据备份,以前只是使用从未配置过,今天简单配置一下!
mysql主从复制是通过binary log日志实现,具体实现流程如下:
1.主库开启binlog日志,且主库将所有操作语句记录到binlog中,并允许从库远程连接权限
2.从库开启I/O线程和SQL线程。I/O线程负责读取主库的binlog内容到relay log中;SQL线程负责从relay log中读取binlog内容并更新到从库中
下面是从网上找了一张经典的主从复制流程图:
注意事项:
mysql主从库版本尽量保持一致,如不一致主库版本要低于从库版本
mysql主从库尽量分布于不同服务器上,主库必须开启bin log日志
主从库初始数据保持一致
主库配置:
1.设置bin log和server id
vim /etc/my.cnf
2.启动服务
/usr/local/mysql/support-files/mysql.server start
报错:The server quit without updating PID file (/usr/local/mysql/data/ubuntu1.pid)
设置权限:chown -R mysql:mysql /var/log/mysql/ chmod -R 755 /usr/local/mysql/data/
3.创建从库同步数据的账号
mysql -u root -p
3.获取主服务器二进制信息
从库配置:
1.设置server id,此server-id要小于主库server-id
vim /etc/my.cnf
从库bin log日志可不开启,视情况而定,用于测试先不开启
2.启动服务
/usr/local/mysql/support-files/mysql.server start
3.设置连接连接到主库的信息
4.开启同步
start slave;
show slave status G;
正常情况下这两项都应该是Yes才对,奔溃了,o(╥﹏╥)o ,排错吧。。。
1)在my.cnf文件中打开错误日志:vim /etc/my.cnf
2)查看错误日志:cat /var/log/mysqld.log,看到有这条内容
[Warning] Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=ubuntu2-relay-bin' to avoid this problem
然后在配置文件中增加relay-log选项,vim /etc/my.cnf
3)重启myql依然是No,绞尽脑汁,想起来从库服务器环境是从主库复制过来的,主机名和主库主机名都是ubuntu1,好吧,修改主机名:vim /etc/hostname,改成ubuntu2
4)重启主机,启动mysql,执行start slave;直接报错,从库同步启动失败了,然后网上查了需要reset slave再start slave,好吧,执行reset slave,在执行start slave,依然是No,继续崩溃o(╥﹏╥)o
5)继续看错误日志,不看日志凭脑子想是想不出来的,从上往下一行行看,终于看到个ERROR
查百度,原来是auto.cnf里的server-uuid和主库重复,原因还是从库服务器环境直接从主库复制的,文件在/usr/local/mysql/data/下,直接将auto.cnf文件删除,mysql启动时会检查,没有的话会自动创建。
6)重启mysql,继续查看从库同步状态
终于Yes了, O(∩_∩)O哈哈~
测试:
1.主库创建test库,test表,插入数据;
2.从库查看是否有test库,test表,表中是否有相应数据
同步正常!!!完成~