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
本文档使用 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
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码