coldsmog运维笔记
Linux 中间件部署
升级MySQL至最新版本
Zabbix与Zabbix-agent2部署
Galera-Cluster-MySQL 部署
JDK8 部署
FastDFS 部署
MySQL 主从备搭建
RabbitMQ 部署
Redis 部署
Nginx 部署
Gitlab + Jenkins + Sonarqube 部署
Docker 部署
keepalive的安装
Gitlab-ce 部署
Graalvm 部署
Nacos 部署
Kafka 部署
PostgreSQL 部署
MongoDB 部署
Fizz网关搭建
Vue项目部署(Nginx)
CentOS 运维笔记
centos 添加自定义服务
Linux 系统挂载
MySQL命令行
故障排查
Docker 运维笔记
keepalived 配置笔记
win 编辑EFI
win 安装 openclaw
本站点使用 MrDoc 构建
-
+
MySQL 主从备搭建
## 主服务器搭建 1. 准备三台服务器,一主一从一备 2. 在主服务器(master)下找到mysql配置文件。 Window下为my.ini(一般在C:\ProgramData\MySQL\MySQL Server 5.7下); Linux下为/etc/my.cnf 3. 在[mysqld]下添加如下配置 ``` # 服务的唯一编号 server-id=1 # 开启mysql binlog功能 slave会基于此log-bin来做replication log-bin=master-bin log-bin-index=master-bin.index # binlog记录内容的方式,记录被操作的每一行 binlog_format=ROW # 减少记录日志的内容,只记录受影响的列 binlog_row_image=minimal # 指定需要复制的数据库名 # 如果没有指定会监听复制所有的库,新建库操作也会复制,反之只监听复制指定的库 binlog-do-db=test #不用于master-slave的具体数据库 binlog_ignore_db=mysql binlog_ignore_db=information_schema ``` 4. 授权 我们需要给slave配置一个用户/密码的权限 ``` # 只读赋权 GRANT SELECT ON *.* TO 'lucky'@'slave服务器IP' IDENTIFIED BY 'luckytea'; # 从权限 赋权 GRANT REPLICATION SLAVE ON *.* TO 'luckytea'@'slave服务器IP' IDENTIFIED BY 'luckytea'; # 刷新权限 FLUSH PRIVILEGES; ``` 5. 重启mysql | 系统 | 命令 | | ------------ | ------------ | | Linux | service mysqld restart; | | Window | net stop mysql; <br />net start mysql;| 6. 查看主服务器状态 ``` # 确保主从库数据库结构一致 # 查看server-id 是否和配置一致,从服务器id需要大于主服务器id show variables like '%server_id%' # 将下列结果中 File和 Position 记录后交给从服务器搭建人员 show master status\G; ``` **注意!更改配置或者数据库重启,主库日志的Position会改变,从库需要重新配置** ## 从服务器搭建 6. 在从服务器(slave)下找到mysql配置文件。 Window下为my.ini(一般在C:\ProgramData\MySQL\MySQL Server 5.7下); Linux下为/etc/my.cnf 7. 在[mysqld]下添加如下配置 ``` log-bin=relay-bin #先全局查找注释原来的server-id server-id=2 #保存配置进行重启查看server-id show variables like '%server_id%'; ``` 8. 进入slave的mysql命令行 执行 ``` CHANGE MASTER TO MASTER_HOST='master所在服务器的IP', MASTER_USER='master授权的账号', MASTER_PASSWORD='master授权的密码', MASTER_LOG_FILE='master的日志文件名', MASTER_LOG_POS=master的日志所在位置; ``` 9. 执行服务 并查看状态 ``` # 关闭防火墙或者打开端口权限 # 查看server-id 是否和配置一致,从服务器id需要大于主服务器id show variables like '%server_id%' start slave; show slave status\G; # 请确认 Master_Log_File = 主服务器的File, Read_Master_Log_Pos = 主服务器的Position # 请确认 Slave_IO_Running = Slave_SQL_Running = yes ``` 10. 如果Slave_SQL_Running = No ``` 方法一:说明从库执行了错误操作,请进行回滚 stop slave ; set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; start slave ; show slave status\G; 方法二:重新进行一次同步操作 stop slave ; CHANGE MASTER TO MASTER_HOST='master所在服务器的IP', MASTER_USER='master授权的账号', MASTER_PASSWORD='master授权的密码', MASTER_LOG_FILE='master的日志文件名', MASTER_LOG_POS=master的日志所在位置; start slave; show slave status\G; ``` 11. 修改主库数据库,如从库变化,则配置成功 ## 主主互备 主主互备:服务器1是服务器2的主服务器,服务器2也是服务器1的主服务器,互相进行主从备份。主从备份过程参考如上。 **注意,为了避免主键id冲突,需要加入如下配置** 主服务器1 在/etc/my.cnf下[mysqld]加入如下语句,使得新增id全为奇数 ``` # 自增id起始值 auto_increment_offset=1 # 每次自增数字 auto_increment_increment=2 ``` 主服务器2 在/etc/my.cnf下[mysqld]加入如下语句,使得新增id全为偶数 ``` # 自增id起始值 auto_increment_offset=2 # 每次自增数字 auto_increment_increment=2 ``` **注意,本教程未考虑灾备和脑裂的情况,暂行方案是连接客户端时捕获异常,切换ip连接。** **灾备+脑裂 推荐使用keepaliver,但是脚本需要自己编写,较复杂** **只灾备不考虑集群,可以先上nginx,用upstream的backup做简单灾备 [参考官网文档](http://nginx.org/en/docs/http/ngx_http_upstream_module.html)**
寒烟濡雨
2021年6月8日 14:28
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码