网上资料繁多,需要跳多少坑才能实现,跳跳就知道了。

--

主从复制

如题:主数据库进行的操作,从数据库进行备份。

--

原理

有关于这方面的原理网上也是一搜一大片,去看看吧。肯定没错。

这里简单说一下数据库是如何进行复制的呢?这里做一个比喻。

例如:

  你想盗一个 QQ 号!

  你认识了这个网吧的网管,交待他。偷偷的把账号密码记下来。

  网管蹲在他的身后,记录下了他的 QQ 账号和密码!

  你晚上找网管,拿到了QQ!  

如果我们反推我们的备份数据库呢?

  在开启一个主从后,当你的主数据发生改变。就会启动一个线程记录你在主数据的操作【二进制文件】,同时从数据会得到这个文件,并在数据库操作。

  讲的比较糙,详细的原理可以看一下原理,真的很多。

--

实践

俗话说理论指导实践,理论已经有了,那么我们开始搭建一个简单的 主从复制 !

准备两台虚拟机:

  这里推荐裸机装 mysql 【我的试验机是 ubuntu16-04;mysql 版本为 5.7】

条件

两主机一定是网络没问题的,可以 ping 通的。

--

配置主机【Master】

主要配置的参数有两个:

server-id  唯一性,注意这里一定要和 从机 不同【一定是唯一的】
log_bin   这里也就是记录的二进制文件,也就是上面说的小本本

添加用户,并赋予权限,也就是我们之前说的 网管

mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'slavepass';#创建用户
mysql> GRANT REPLICATION ALL ON *.* TO 'repl'@'%';#分配权限
mysql>flush privileges; #刷新权限

设置好了之后,重启我们的 Mysql 服务

sudo service mysql restart

注意:这里 从机 一定要可以连接主机数据库。

如果不能连接,注释掉
#bind-address = 127.0.0.1
再试试?

如果你的主机设置好了,并且从机也可以连接了,那么我们就可以开始设置从机了.

这里我们在主机上找到我们的文件位置和文件,在连接从机时会使用

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| wq_msg.000004 | 415 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)  

--

配置从机【Slave】

设置 server-id

[mysqld]
server-id=2 #设置server-id,必须唯一

重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):

mysql> CHANGE MASTER TO
-> MASTER_HOST='182.92.172.80',
-> MASTER_USER='rep1',
-> MASTER_PASSWORD='slavepass',
-> MASTER_LOG_FILE='wq_msg.000004',
-> MASTER_LOG_POS=415;

设置好之后启动我们的 slave 同步进程。

mysql>start slave;

之后我们一定要看状态

mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 182.92.172.80
Master_User: rep1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-.000013
Read_Master_Log_Pos: 11662
Relay_Log_File: mysqld-relay-bin.000022
Relay_Log_Pos: 415
Relay_Master_Log_File: wq_msg_000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
...

主要看这两个参数 Slave_IO_Running 和 Slave_SQL_Running ,都为 OK 时候说明没问题了。

如果有问题!看日志!一定看日志

--

这里我说一下我碰到的问题。

1:日志报错 UUID 错误

  在 mysql5.6 之后,虽然是以server-id 为唯一标识,但是最后是以 UUID 为标识进行处理。之前我的测试环境是拷贝了两个一样的 mysql Docker 导致UUID一样。无法同步。

  查看UUID

mysql> show variables like '%server_uuid%';

  主从一定要不同!

2:docker问题

  还是环境问题,用的 Docker 虽然端口 3306 映射了出去,但是二进制文件并未映射。导致报错。

如果还有什么问题的话。

看日志!一定日志

--

这里只说了最基本的配置怎么完成,该学习的还有很多。下面扩展一些阅读和问题。之后我也会慢慢学习。

1、主从的好处是?
2、主从的原理是?
3、从数据库的读的延迟问题了解吗?如何解决?
4、做主从后主服务器挂了怎么办?

--

参考:

MySQL主从复制(Master-Slave)实践

学习计划 mysql 主从复制的更多相关文章

  1. 学习计划 mysql 用户管理与权限

    最近在学习数据库的 主从复制 里面涉及到了关于用户及其管理权限的赋予,之前一直没有认真的学习这个. 现在想具体的学习一下. -- 为什么 数据库 要实现多用户管理? 举个最简单的例子,你需要和第三方做 ...

  2. 学习计划 mysql 整数类型后面的数字,是什么意思?

    Mysql中定义整数类型的数字,是指定这个字段的长度么? 比如 INT(10) 10代表10个字节么?还是只能存储10为长度的数字内容? 今天本来想学习下字符类型,一下子发现了这个,感觉好有趣. -- ...

  3. 学习计划 mysql 引擎

    -- 什么是引擎? 按照我现在的勒戒,就可以提供 Mysql 对不同表的处理方式,各有优缺点. 就像名字一样,把我们数据库看成法拉利的话,引擎也就是发送机,有的跑的快,有的距离长....... -- ...

  4. 学习计划 mysql explain执行计划任务详解

    我们在之前已经找到了需要优化的SQL,但是怎么知道它的那些方面需要优化呢? explain就是为了这个使用的. explain显示了 mysql 如何使用索引来处理select语句以及连接表.可以帮助 ...

  5. 学习计划 mysql desc表结构分析

    在完成数据表建表后,我们需要知道我们的表结构是什么,有没有和构造表时差异的地方. -- 简单查看表结构 desc 表名 这里拿数据库的一张表中做示例 mysql> desc rental; +- ...

  6. 重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践

    一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库 ...

  7. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  8. mysql学习(3)-linux下mysql主从复制

    前言:为什么MySQL要做主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...

  9. Mysql学习总结(43)——MySQL主从复制详细配置

    环境 操作系统:CentOS-6.6-x86_64-bin-DVD1.iso MySQL版本:mysql-5.6.26.tar.gz 主节点IP:192.168.1.205 主机名:edu-mysql ...

随机推荐

  1. vmware下虚拟机不能上网问题解决

    这个问题困扰了好久,vmware下装的虚拟机可以通过DHCP获取单独IP,但当用到管控较严格的环境,需要它与主机共享IP时,就不好使了. 今天在一篇文章中找到答案,如下图,windows系统中要启动V ...

  2. Nginx 用户认证

    访问一些比较私密的页面 ( 如管理后台,数据后台 ) 时,我们就可以设置访问该页面时需要使用用户名和密码进行验证,这就是用户认证 [root@localhost ~]$ cat /usr/local/ ...

  3. 使用 Selenium

    Selenium 简介 Selenium 基本用法 Selenium 查找节点 Selenium 节点交互 Selenium 动作链 Selenium 执行 JavaScript Selenium 获 ...

  4. codeblocks编码设置

    注意编码统一,即文件编码和编译时的编码统一即可. codeblock13.12下: 文件编码: setting -> editor ->general setting -> othe ...

  5. Struts在Web.xml中的配置及Struts1和Struts2的区别

    (1)配置Struts的ActionServlet     <servlet>元素来声明ActionServlet    <servlet-name>元素:用来定义Servle ...

  6. Linux设备驱动剖析之IIC(一)

    写在前面 由于IIC总线只需要两根线就可以完成读写操作,而且通信协议简单,一条总线上可以挂载多个设备,因此被广泛使用.但是IIC总线有一个缺点,就是传输速率比较低.本文基于Linux-2.6.36版本 ...

  7. WP8.1学习系列(第二十六章)——控件模板

    在本文中 自定义控件模板示例 指定控件的可视结构. 指定控件的可视行为 使用工具轻松处理主题 控件和辅助功能 了解有关控件默认模板的详细信息 控件模板中的主题资源 相关主题 在 XAML 框架中,如果 ...

  8. 【Spring Boot && Spring Cloud系列】那些Spring Boot中踩过的坑

    一.不连接数据库启动springboot报错 Cannot determine embedded database driver class for database type NONE 原因:Spr ...

  9. 二叉树的实现(Java语言描述)

    实现二叉树   并先序遍历之. package 二叉树的实现; public class BinaryTree<T> { class Node { int value; // 该节点存储的 ...

  10. gradle-4.1-all.zip

    1. https://services.gradle.org/distributions/ https://services.gradle.org/distributions/gradle-4.1-a ...