MySQL集群架构:一主多从模式的搭建
一、准备环境
1.准备3台机子,或者在一台机子上搭建三台虚拟机,这里搭建一主两从,:
10.168.15.100:160 10.168.15.101:165 10.168.15.102:170
2.准备要复制的数据。
3.主数据库加锁,防止数据变动导致主从数据库状态不一致。
mysql> flush tables with read lock;
4.导出.sql文件
5.主数据库解锁
mysql> unlock tables;
6.导入从数据库
7.如果三台虚拟机是安装了mysql直接复制过去的则会导致其中安装的数据库uuid相同,记得修改一下,位置在mysql安装位置,一般为/var/lib/mysql/auto.cnf
uuid改成啥?怎么来呢?
在对应数据库中执行:
select uuid();
复制上去保存就可以了~也有的直接删了~
二、主库配置
在主库所在机/etc/my.cnf配置如下信息,此文件由于安装时可能设置了路径每个电脑位置可能略有差别/etc/xxx../my.cnf,以自己实际为主。
# 设置 server_id,一般设置为 IP,唯一就行了 server_id=160 #开启二进制日志 log-bin=mysql-bin max_allowed_packet=20M #需要复制的数据库名,需要复制多个重复此选项 binlog-do-db=userdb #binlog-do-db=userdb111 #将 函数复制到从库slave log_bin_trust_function_creators=1
保存后重启数据库~~
三、从库配置
在两个从库的/etc/my.cnf文件中分别做以下配置:
server_id=165 //唯一 log-bin=mysql-bin log-slave-updates sync-binlog=1 max_allowed_packet=64M //每次复制允许包的最大值 replicate-do-db=userdb //要复制的数据库名字,多个重复此选项 slave-net-timeout=60 //s log_bin_trust_function_creators=1 binlog_format=row //日志格式一行一行的 expire_logs_days=7 max_binlog_size=100m binlog_cache_size=4m max_binlog_cache_size=512m binlog-ignore-db=mysql auto-increment-offset=1 auto-increment-increment=1 slave-skip-errors=all
保存后重启数据库~~
四、主库数据库配置,在mysql中,或者直接在sqlyog、navicat等工具操作。
添加slave账号root,密码是123456,*.* 是分配所有权限给他,若要单独分配几个权限可去查看权限表进行分配。
mysql> grant replication slave on *.* to 'root'@'10.168.15.101' identified by '123456'; #这里是从库连接主库的密码 mysql> grant replication slave on *.* to 'root'@'10.168.15.102' identified by '123456'; mysql> flush privileges; //更新数据库权限
五、从库数据库配置,分别在两个slave从数据库mysql中,或者直接在sqlyog、navicat等工具操作。
1.设置主库
mysql> change master to master_host='10.168.15.100',master_user='root', master_password='123456'; #上面设置的密码
2.查看主库状态
mysql> show master status;
3.设置要复制的日志相关
//与上图中的值保持一致 mysql> change master to master_log_file='mysql-bin.000002',master_log_pos=154;
//开启同步 //停止同步:stop slave
mysql> start slave;
//查看从服务器状态 \G是一行一行显示,不然会显示个表格非常乱。显示了一大堆,这里不截图了。
mysql> show slave status\G;
六,结果测试,在主库中添加数据查看同步情况:
刷新slave从库数据可以看到当主库中数据改变时从库也跟着变化,对新表的添加删除也同样可以同步~~
七、当MySQL重启或服务器断电重启后就会发现停止了同步,查看MySQL日志显示错误是同步日志文件找不到啥的,这是因为重启后刷新了日志。
解决办法:
1.在MySQL安装目录下,以自己安装的路径为主,一般在/var/lib/mysql下找到如下图类似的删干净,不敢删可以先备份了大摇大摆的删。然后重启MySQL。
2.在slave从机上,进入mysql,进行如下操作即可恢复同步:
mysql> flush logs; //刷新日志 mysql> show master status; //查看主库状态,看清楚文件名和position mysql> stop slave; //停止同步 mysql> change master to master_log_file='mysql-bin.000002',master_log_pos=154; //重新设置bin-log和pos,与上面show master status;所示的一致
mysql> start slave;
然后它就恢复同步了,查看状态mysql> show slavestatus;可以看到此slave相关配置信息了,必须保证Slave_IO_Running及Slave_SQL_Running进程正常运行,即Yes状态。