详解MySQL数据库设置主从同步的方法
技术百科
黄舟
发布时间:2017-02-28
浏览: 次 简介
mysql主从同步是目前使用比较广泛的数据库架构,技术比较成熟,配置也不复杂,特别是对于负载比较大的网站,主从同步能够有效缓解数据库读写的压力。
mysql主从同步的机制:
mysql同步的流程大致如下:
1、主服务器(master)将变更事件(更新、删除、表结构改变等等)写入二进制日志(master log)。
2、从服务器(slave)的io线程从主服务器(binlog dump线程)获取二进制日志,并在本地保存一份自己的二进制日志(relay log)
3、从服务器的sql线程读取本地日志(relay log),并重演变更事件。
mysql主从同步的作用:
1、可以作为一种备份机制,相当于热备份(在从备份,避免备份期间影响主服务器服务)
2、可以用来做读写分离,均衡数据库负载(主写从读)
3、当主服务器出现问题时,可以切换到从服务器。
mysql主从同步的步骤:
一、准备操作:
1、主从数据库版本一致,建议版本5.5以上
2、主从数据库数据一致
二、主数据库master修改:
1、修改mysql配置:
# /etc/my.cnf log-bin = mysql-bin # 主数据库端ID号 server-id = 1 log-bin=/home/mysql/logs/binlog/bin-log max_binlog_size = 500M binlog_cache_size = 128K binlog-do-db = adb binlog-ignore-db = mysql log-slave-updates expire_logs_day=2 binlog_format="MIXED"
上面配置中各个参数的含义和相关注意项:
#服务器标志号,注意在配置文件中不能出现多个这样的标识,如果出现多个的话mysql以第一个为准,一组主从中此标识号不能重复。 server-id = 1 log-bin=/home/mysql/logs/binlog/bin-log #开启bin-log,并指定文件目录和文件名前缀。 #每个bin-log最大大小,当此大小等于500M时会自动生成一个新的日志文件。一条记录不会写在2个日志文件中,所以有时日志文件会超过此大小。 max_binlog_size = 500M binlog_cache_size = 128K #日志缓存大小 binlog-do-db = adb #需要同步的数据库名字,如果是多个,就以此格式在写一行即可。 binlog-ignore-db = mysql #不需要同步的数据库名字,如果是多个,就以此格式在写一行即可。 #当Slave从Master数据库读取日志时更新新写入日志中,如果只启动log-bin 而没有启动log-slave-updates则Slave只记录针对自己数据库操作的更新。 log-slave-updates expire_logs_day=2 #设置bin-log日志文件保存的天数,此参数mysql5.0以下版本不支持。 binlog_format="MIXED" #设置bin-log日志文件格式为:MIXED,可以防止主键重复。
2、重启mysql,创建用于同步的账户:
# 创建slave帐号slave,密码111111 mysql>grant replication slave on *.* to 'slave'@'%' identified by '111111'; # 更新数据库权限 mysql>flush privileges;
3、查询master的状态
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000009 | 196 | | | +------------------+----------+--------------+------------------+ 1 row in set
注:执行完这个步骤后不要再操作主数据库了,防止主数据库状态值变化
三、从数据库slave修改:
1、修改MySQL配置:
# 从数据库端ID号 server-id =2
2、执行同步命令
# 执行同步命令,设置主数据库ip,同步帐号密码,同步位置 mysql>change master to master_host='192.168.1.2',master_user='slave',master_password='111111',master_log_file='mysql-bin.000009',master_log_pos=196; # 开启同步功能 mysql>start slave;
3、检查从数据库状态:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.2
Master_User: slave_account
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000009
Read_Master_Log_Pos: 196
Relay_Log_File: vicky-relay-bin.000002
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
...
...
注:Slave_IO_Running及Slave_SQL_Running进程必须正常运行,即YES状态,否则说明同步失败。可用这两项判断从服务器是否挂掉
到这里,主从数据库设置工作已经完成,自己可以新建数据库和表,插入和修改数据,测试一下是否成功
四、其他可能用到的相关参数:
1、master端:
# 不同步哪些数据库 binlog-ignore-db = mysql binlog-ignore-db = test binlog-ignore-db = information_schema # 只同步哪些数据库,除此之外,其他不同步 binlog-do-db = game # 日志保留时间 expire_logs_days = 10 # 控制binlog的写入频率。每执行多少次事务写入一次 # 这个参数性能消耗很大,但可减小MySQL崩溃造成的损失 sync_binlog = 5 # 日志格式,建议mixed # statement 保存SQL语句 # row 保存影响记录数据 # mixed 前面两种的结合 binlog_format = mixed
2、slave端:
# 停止主从同步 mysql> stop slave; # 连接断开时,重新连接超时时间 mysql> change master to master_connect_retry=50; # 开启主从同步 mysql> start slave;
以上连接超时设置,类似方式可用于设置主数据库ip,同步帐号密码,同步位置
判断主从服务器是否正常运行代码:
//在从服务器中执行以下语句
$sql = "show slave status";
$result = mysql_query($sql, $slave_link);
$row = mysql_fetch_assoc($result);
$Slave_IO_Running = $row['Slave_IO_Running'];
$Slave_SQL_Running = $row['Slave_SQL_Running'];
//下面两项为判断标准
if ('Yes' == $Slave_IO_Running && 'Yes' == $Slave_SQL_Running) {
} else {
$content .= "从数据库( $host )挂掉了!!!
";
}总结
以上就是详解MySQL数据库设置主从同步的方法 的内容,更多相关内容请关注PHP中文网(www.)!
# 自己的
# 也不
# 相关内容
# 多个
# 第一个
# 不需要
# 两种
# 可以用
# mysql
# 正常运行
# 新新
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Mac如何创建和管理多个桌面空间_Mac高效多任务
- c++如何打印函数堆栈信息_c++ backtra
- Windows家庭版如何开启组策略(gpedit.
- 如何提升Golang JSON序列化性能_Gola
- c# 服务器GC和工作站GC的区别和设置
- Mac如何修改Hosts文件?(本地开发与屏蔽网站
- Win10系统映像怎么恢复 Win10使用系统映像
- Windows10无法识别USB设备描述符请求失败
- mac怎么打开终端_MAC终端Terminal使用
- 如何在Golang中实现邮件发送功能_Golang
- PythonWeb前后端整合项目教程_FastAP
- Linux如何安装JDK11_Linux环境变量配
- 如何在 Go 同包不同文件中正确引用结构体
- php怎么下载安装后设置错误日志_phpini l
- Python函数缓存机制_lru_cache解析【
- 作用域操作符会影响性能吗_php静态调用性能分析【
- Win11怎么设置任务栏透明_Windows11使
- Win10路由器怎么隐藏ssid Win10隐藏w
- 微信里的php文件怎么变mp4_微信接收php转m
- 如何使用Golang开发基础文件下载功能_Gola
- Win10怎么卸载爱奇艺_Win10彻底卸载爱奇艺
- 如何在Golang中处理模块包路径变化_Golan
- Windows10如何更改日期格式_Win10区域
- Win11开机速度慢怎么优化_Win11系统启动加
- Win11更新后变慢怎么办_Win11系统更新后卡
- Win11如何更改用户账户文件夹名称 Win11修
- Windows如何设置登录时的欢迎屏幕背景?(锁屏
- Python网络日志追踪_请求定位解析【教程】
- php在Linux怎么部署_LNMP环境搭建PHP
- C++如何编写函数模板?(泛型编程入门)
- Win10文件历史记录怎么用 Win10开启自动备
- c++怎么使用std::unique实现去重_c+
- Mac的访达(Finder)怎么用_Mac文件管理
- Win11怎么更改文件夹图标_自定义Win11文件
- Win11怎么用设置清理回收站_Win11设置清理
- Win11怎么恢复误删照片_Win11数据恢复工具
- Windows系统被恶意软件破坏后的恢复策略_错误
- 电脑的“网络和共享中心”去哪了_Windows 1
- Mac如何查看电池健康百分比_Mac系统信息电源检
- php打包exe后无法写入文件_权限问题解决方法【
- php485函数怎么捕获异常_php485错误处理
- 如何解决同一段404代码在不同主机上表现不一致的问
- 如何使用正则表达式批量替换重复的 *- 模式为固定
- Win11如何设置自动关机 Win11定时关机命令
- php报错怎么查看_定位PHP致命错误与警告的方法
- Python lxml的etree和Element
- c# Task.Yield 的作用是什么 它和Ta
- Mac版Final Cut Pro入门_Mac视频
- Python函数参数高级用法_默认值与可变参数解析
- Go语言中CookieJar的持久化机制解析:内存

he_size = 128K
binlog-do-db = adb
binlog-ignore-db = mysql
log-slave-updates
expire_logs_day=2
binlog_format="MIXED"
QQ客服