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 ''; # 更新数据库权限
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='',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 )挂掉了!!! <br/>";
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

MySQL Replication 详解MySQL数据库设置主从同步的方法的更多相关文章

  1. MySQL存储过程详解 mysql 存储过程

    原文地址:MySQL存储过程详解  mysql 存储过程作者:王者佳暮 mysql存储过程详解 1.     存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储 ...

  2. MySQL数据库设置主从同步

    MySQL主从同步的机制: MySQL同步的流程大致如下: 1.主服务器(master)将变更事件(更新.删除.表结构改变等等)写入二进制日志(master log). 2.从服务器(slave)的I ...

  3. MySQL存储过程详解 mysql 存储过程(二)

    mysql存储过程详解 1.      存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL ...

  4. MySQL存储过程详解 mysql 存储过程(转)

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

  5. mysql触发器详解 mysql触发器

    目录 21.1. CREATE TRIGGER语法 21.2. DROP TRIGGER语法 21.3. 使用触发程序 MySQL 5.1包含对触发程序的支持.触发程序是与表有关的命名数据库对象,当表 ...

  6. mysql存储过程详解 mysql存储过程和函数

    第20章:存储程序和函数 目录 20.1. 存储程序和授权表 20.2. 存储程序的语法 20.2.1. CREATE PROCEDURE和CREATE FUNCTION 20.2.2. ALTER ...

  7. mysql视图详解 mysql视图

    目录 22.1. ALTER VIEW语法 22.2. CREATE VIEW语法 22.3. DROP VIEW语法 22.4. SHOW CREATE VIEW语法 本章讨论了下述主题: ·    ...

  8. MySQL 数据类型 详解

    MySQL 数据类型 详解 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 My ...

  9. MySQL状态变量详解

    MySQL状态变量详解 mysql的状态变量(status variables)记录的mysql服务器的运行状态信息.查看语法如下: SHOW [GLOBAL | SESSION] STATUS; S ...

随机推荐

  1. 20145232 韩文浩 《Java程序设计》第2周学习总结

    教材学习内容总结 这周主要学习了注释的使用,运算符的基本使用,认识了类型,变量与常量,以及一些语句语法.复习了进制转换. 整数 Short整数占用2字节,储存整数范围-32768 ~ 32767(2- ...

  2. 敏捷项目管理工具-Trello(电子看板)

    Trello简介(https://www.trello.com) A Trello board is a list of lists, filled with cards, used by you a ...

  3. HTML5表单新属性

    HTML5表单新属性 autofocus  自动聚焦 <input type="text" autofocus> placeholder占位文本 tel         ...

  4. Establish a website in 5 minutes

    $sudo apt-get update                                    //update   $sudo apt-get install tasksel     ...

  5. android 屏幕旋转 不重新加载oncreate

    当手机设定了使用横屏或者竖屏的时候,还想要使用重力感应,可以设置activity属性 android:screenOrientation="sensor" 但是每次翻转屏幕,都会重 ...

  6. Qt 中的消息对话框

    1. QMessagebox 类的几个静态成员函数,可以直接调用创建对话框 StandardButton critical(QWidget * parent, const QString &  ...

  7. hdu 5086 数列连续和求和

    http://acm.hdu.edu.cn/showproblem.php?pid=5086 求一段数列里面所有连续和的和,卡精度 规律很明显,数列里面每个数都被加了i*(n+1-i)次 注意下精度即 ...

  8. Dnsmasq安装与配置-搭建本地DNS服务器

    默认的情况下,我们平时上网用的本地DNS服务器都是使用电信或者联通的,但是这样也导致了不少的问题,首当其冲的就是上网时经常莫名地弹出广告,或者莫名的流量被消耗掉导致网速变慢.其次是部分网站域名不能正常 ...

  9. 设置UITableView分割线距左边的间距

    ``` [self.tableView setSeparatorInset:UIEdgeInsetsZero]; [self.tableView setLayoutMargins:UIEdgeInse ...

  10. SQL Server 字符串拼接、读取

    一.查询结果使用,字符串拼接 declare @names nvarchar(1000) declare @ParmDefinition nvarchar(1000) declare @sqltext ...