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状态。

posted @ 2022-04-14 15:02  蒂雪凌星  阅读(608)  评论(0编辑  收藏  举报
Live2D