1、简介

1.1主从复制

是指建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是实时的业务数据库,从数据库的作用和使用场合一般有几个:
一是作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作;
二是可在从数据库作备份、数据统计等工作,这样不影响主数据库的性能;

1.2读写分离

指读与写分别使用不同的数据库,当然一般是在不同服务器上的;在同一台服务器上的读写环境,估计只是用来测试吧。
一般读写的数据库环境配置为,一个写入的数据库(主库),一个或多个读的数据库(从库),各个数据库分别位于不同的服务器上,充分利用服务器性能和数据库性能;当然,其中会涉及到如何保证读写数据库的数据一致,这个就可以利用主从复制技术来完成。
一般应用场合为:业务吞吐量很大,读数据库(可简单理解为select语句的 比例和影响)的负载较大

2、Demo

现在我在虚拟机上完成主从配置,系统是CenterOS6.5,mysql版本是5.7.13,主服务器的ip是192.168.0.4, 从服务器的ip是192.168.0.2,因为配置mysql主从之后,主库原有的数据不能同步到从库,为保证主库和从库数据一致性,必须想让主库和从库的数据一样的时候(通过mysqldump),才开始配主从,在这里就不说了。

2.1 master配置

vim /etc/my.cnf

basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
server_id = 1       #数据库唯一标识,不能与从库重复 (必须项)
log-bin = mysql-bin  #开启mysql binlog 日志(必须项)

2.2 slalve 配置

vim /etc/my.cnf

basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
server_id = 1       #数据库唯一标识,不能与从库重复 (必须项)
log-bin = mysql-bin  #开启mysql binlog 日志(必须项)

2.3 重启两个mysql数据库

# service mysqld restart

2.4 在主数据库给jacky用户授权

#/usr/local/mysql/bin/mysql -uroot -padmin test  #登录test数据库
mysql>GRANT REPLICATION SLAVE ON *.* to 'jacky'@'192.168.0.2' identified by 'admin' #表示jacky用户可以从192.168.0.2机器登录,并且对主库的所有数据库的所有表拥有复制权限

2.5 查看主数据库的状态

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 449 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

2.6 用root用户登录从库,并配置从库

#/usr/local/mysql/bin/mysql -uroot -padmin test  #登录test数据库
mysql> change master to master_host='192.168.0.4',master_port= , master_log_file='mysql-bin.000001', master_log_pos= , master_bind='', master_user='jacky',master_password='admin';
Query OK, rows affected, warnings (0.04 sec)
mysql> start slave #开启从库

2.7 检查mysql主从是否配置成功

mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.4
Master_User: jacky
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 449
Relay_Log_File: jacky-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 449
Relay_Log_Space: 527
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: f4b6bde4-a73f-11e6-b06e-000c2910d49e
Master_Info_File: /usr/local/mysql/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
当看来下面这两个值的时候,说明主从配置成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
生产上编写一shell脚本,用nagios监控slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或零个yes,就表明主从有问题了,发短信警报吧

2.8 向master中插入3条记录,看看slave是否同步

master

mysql> select * from student;
+------+
| id |
+------+
| 2 |
| 3 |
| 4 |
+------+
3 rows in set (0.08 sec) mysql> insert into student values(1);
Query OK, 1 row affected (0.17 sec) mysql> insert into student values(5);
Query OK, 1 row affected (0.05 sec) mysql> insert into student values(6);
Query OK, 1 row affected (0.08 sec)

slave

mysql> select * from student;
+------+
| id |
+------+
| 2 |
| 3 |
| 4 |
| 1 |
| 5 |
| 6 |
+------+
6 rows in set (0.09 sec)

可以看到,salve 同步成功

												

mysql5.7主从复制的更多相关文章

  1. MySQL5.6主从复制最佳实践

    MySQL5.6     主从复制的配置  环境 操作系统:CentOS-6.6-x86_64 MySQL 版本:mysql-5.6.26.tar.gz 主节点 IP:192.168.31.57    ...

  2. mysql5.7 主从复制的正常切换【转】

    目前环境如下: master server IP:172.17.61.131 slave server IP:172.17.61.132 mysql version: mysql-5.7.21-lin ...

  3. mysql5.7主从复制--在线变更复制类型【转】

    这里说一下关于如何在线变更复制类型(日志复制到全局事物复制),参考课程:mysql5.7复制实战 先决条件     (1)集群中所有的服务器版本均高于5.7.6(2)集群中所有的服务器gtid_mod ...

  4. MySQL5.6主从复制方案

    MySQL5.6主从复制方案 1.主备服务器操作 环境:CentOS 6.3/6.4 最小化缺省安装,配置好网卡. 安装MySQL前,确认Internet连接正常,以便下载安装文件. # 新增用户组 ...

  5. MySQL5.7Gtid主从复制总是遇到日志被清等出现无法正常主从复制

    最近最是在MySQL5.7上的的gtid主从复制问题总是遇上下面问题: Last_Error: Coordinator stopped because there were error(s) in t ...

  6. Mysql5.6主从复制-基于binlog

    MySQL5.6开始主从复制有两种方式:基于日志(binlog):基于GTID(全局事务标示符). 此文章是基于日志方式的配置步骤 环境: master数据库IP:192.168.247.128sla ...

  7. MySQL5.6主从复制搭建基于日志(binlog)

    什么是MySQL主从复制 简单来说,就是保证主SQL(Master)和从SQL(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟 ...

  8. MySQL5.7 主从复制配置

    一.主从复制原理 MySQL 主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致.每一个主从复制的连接,都有三个线程.拥有多个从库的主 ...

  9. Centos7 下配置mysql5.6主从复制实例(一主两从)

    标签:mysql 数据库 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://8941355.blog.51cto.com/89313 ...

随机推荐

  1. 微信支付:redirect-uri参数错误 的解决办法

    redirect_url参数错误: 报这个错误,说明你的公众号后台授权设置有问题(一般有两处) 一:检查授权目录 答:支付授权目录是网站发起请求的页面所在目录,并且必须是能通过url地址访问的(与真实 ...

  2. update-alternatives命令

    快速复习: 增加:$sudo update-alternatives --install 程序生成的快捷方式的目标完整位置 程序名 程序其中一个版本的完整路径 配置:$sudo update-alte ...

  3. Android编译选项eng、user、userdebug的区别

    eng:debug 版本 user: release 版本 userDebug版本:部分debug版本 LOCAL_MODULE_TAGS := user eng optional test这个样子. ...

  4. Centos6.6 tar包安装JDK

    Linux CentOS 6.6安装JDK1.7 目录 1.下载JDK 2.卸载JDK 3.安装JDK 3.1..rpm后缀格式JDK安装方式 3.2..tar.gz后缀格式JDK安装方式 4.验证安 ...

  5. Linux中安装Cisco Packet Tracer

    Cisco Packet tracer是什么? Cisco Packet Tracer是一个强大的网络模拟工具,用于进行Cisco认证时的培训.它为我们 提供了各个路由器和网络设备的良好的接口视图,这 ...

  6. Ubuntu 14.04 中安装 VMware10 Tools工具

    Run: apt-get install dkms linux-headers-$(uname -r) build-essential psmisc2 - Run: git clone https:/ ...

  7. .Net六大验证及使用方法

    C#包含有六种验证方式,分别为: 一.非空验证  RequiredFieldValidator. 二.对比验证 CompareValidator. 三.范围验证 RangeValidator. 四.正 ...

  8. 【Unity3D游戏开发】GameObject.Find()、Transform.Find查找隐藏对象 (十)

    GameObjectFindTransformFind查找游戏对象 前置条件 相关API 1 GameObjectFind 2 TransformFind 3 其他查找 实际测试 即使隐藏root节点 ...

  9. HTMl中Meta标签详解以及meta property=og标签含义

    meta是用来在HTML文档中模拟HTTP协议的响应头报文.META标签是HTML语言HEAD区的一个辅助性标签,它位于HTML文档头部的<HEAD>标记和<TITLE>标记之 ...

  10. Hibernate实体类注解

    常用的hibernate annotation标签如下: @Entity --注释声明该类为持久类.将一个Javabean类声明为一 个实体的数据库表映射类,最好实现序列化.此时,默认情况下,所有的类 ...