热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MySQL主从复制配置详述

我们这个实验演示的是mysql的异步复制,何谓异步复制,即一条语句开始,主服务器不会等待从服务器执行完,而是主服务器一执行完就

我们这个实验演示的是mysql的异步复制,何谓异步复制,即一条语句开始,主服务器不会等待从服务器执行完,而是主服务器一执行完就

一、mysql主从复制的基本原理:
我们这个实验演示的是mysql的异步复制,,何谓异步复制,即一条语句开始,主服务器不会等待从服务器执行完,而是主服务器一执行完就开始下一条语句,这也是出于主服务器并发型的考虑。slave端会开启两个thread,即Slave I/O thread和Slave SQL thread,I/O thread负责从master的二进制日志中读取事件并将这些时间信息存放发到relay-log中,Slave SQL thread负责从relay-log日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。
所以说:主服务器上必须开启二进制日志,而从服务器上只需开启中继日志。

二、mysql支持的复制类型:
1. 基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。
2. 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
3. 混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

三、步骤:

主mysql服务器的配置:
1. 开启二进制日志
2. 创建具有复制权限的用户
3. Server-id唯一
从mysql服务器的配置:
1. 开启中继日志
2. Server-id唯一
3. 设为只读模式

假设主服务器上的数据比较大,同步会比较慢,所以要先用mysqldump导出主服务器的数据,再导入到从服务器上,然后再开始同步,这样比较合理。

四、准备:
在主服务器上创建一张测试表
mysql> create database data;
Query OK, 1 row affected (0.03 sec)
mysql> select * from data.info;
+-----+-------+-----+
| sid | name | age |
+-----+-------+-----+
| 1 | zhang | 23 |
| 2 | li | 42 |
| 3 | wang | 34 |
| 4 | qian | 25 |
| 5 | cheng | 29 |
+-----+-------+-----+
5 rows in set (0.00 sec)

五、开始配置

主服务器:
1. 开启二进制日志并指定server-id

[root@Oracle ~]# vim /etc/my.cnf
[client]
user=root
password=12345
[mysqld]
log-bin=mysql-bin
server-id=1
#添加这几行,mysql5.6默认没有开启二进制日志文件

[root@oracle ~]# service mysqld restart
Shutting down MySQL.. [ OK ]
Starting MySQL. [ OK ]

2. 创建具有复制权限的用户
mysql> grant replication slave on *.* to slave@192.168.2.96 identified by '12345';
Query OK, 0 rows affected (0.04 sec)

从服务器:
1. 开启中继日志并指定server-id和只读
[root@node2 ~]# vim /etc/my.cnf
[client]
user=root
password=12345
[mysqld]
relay-log=mysql-relay-bin
server-id=2
read-Only=on
[root@node2 ~]# service mysqld restart
Shutting down MySQL.... [确定]
Starting MySQL. [确定]

同步:
1. 在主务器上进行逻辑备份
[root@oracle ~]# mysqldump --master-data=2 --databases data --lock-all-tables > /root/bak.sql
[root@oracle ~]# scp /root/bak.sql root@192.168.2.96:/root/

2. 在从服务器上执行该脚本
[root@node2 ~]# mysql [root@node2 ~]# mysql -e 'select * from data.info;'
+-----+-------+-----+
| sid | name | age |
+-----+-------+-----+
| 1 | zhang | 23 |
| 2 | li | 42 |
| 3 | wang | 34 |
| 4 | qian | 25 |
| 5 | cheng | 29 |
+-----+-------+-----+
#主服务器上的data数据库都导入到从服务器了

3. 让从服务器成为slave
[root@node2 ~]# vim /root/bak.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=120;
mysql> change master to master_host='192.168.2.93',master_user='slave',master_password='12345',MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=120;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

查看日志:
2014-02-23 20:45:47 17372 [Note] 'CHANGE MASTER TO executed'. Previous state master_host='slave', master_port= 3306, master_log_file='mysql-bin.000004', master_log_pos= 120, master_bind=''. New state master_host='192.168.2.93', master_port= 3306, master_log_file='mysql-bin.000004', master_log_pos= 120, master_bind=''.
2014-02-23 20:45:52 17372 [Warning] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
2014-02-23 20:45:52 17372 [Note] Slave I/O thread: connected to master 'slave@192.168.2.93:3306',replication started in log 'mysql-bin.000004' at position 120
2014-02-23 20:45:52 17372 [Warning] Slave SQL: If a crash happens this configuration does not guarantee that the relay log info will be consistent, Error_code: 0
2014-02-23 20:45:52 17372 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000004' at position 120, relay log './mysql-relay-bin.000001' position: 4
#slave I/O thread和Slave SQL thread都已经启动

推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 图片复制到服务器 方向变了_双服务器热备更新配置文件步骤问题及解决方法
    本文介绍了在将图片复制到服务器并进行方向变换的过程中,双服务器热备更新配置文件所出现的问题及解决方法。通过停止所有服务、更新配置、重启服务等操作,可以避免数据中断和操作不规范导致的问题。同时还提到了注意事项,如Avimet版本的差异以及配置文件和批处理文件的存放路径等。通过严格执行切换步骤,可以成功进行更新操作。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
author-avatar
Jason子宣_805
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有