学习计划 mysql 主从复制
网上资料繁多,需要跳多少坑才能实现,跳跳就知道了。
--
主从复制
如题:主数据库进行的操作,从数据库进行备份。
--
原理
有关于这方面的原理网上也是一搜一大片,去看看吧。肯定没错。
这里简单说一下数据库是如何进行复制的呢?这里做一个比喻。
例如:
你想盗一个 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 主从复制的更多相关文章
- 学习计划 mysql 用户管理与权限
最近在学习数据库的 主从复制 里面涉及到了关于用户及其管理权限的赋予,之前一直没有认真的学习这个. 现在想具体的学习一下. -- 为什么 数据库 要实现多用户管理? 举个最简单的例子,你需要和第三方做 ...
- 学习计划 mysql 整数类型后面的数字,是什么意思?
Mysql中定义整数类型的数字,是指定这个字段的长度么? 比如 INT(10) 10代表10个字节么?还是只能存储10为长度的数字内容? 今天本来想学习下字符类型,一下子发现了这个,感觉好有趣. -- ...
- 学习计划 mysql 引擎
-- 什么是引擎? 按照我现在的勒戒,就可以提供 Mysql 对不同表的处理方式,各有优缺点. 就像名字一样,把我们数据库看成法拉利的话,引擎也就是发送机,有的跑的快,有的距离长....... -- ...
- 学习计划 mysql explain执行计划任务详解
我们在之前已经找到了需要优化的SQL,但是怎么知道它的那些方面需要优化呢? explain就是为了这个使用的. explain显示了 mysql 如何使用索引来处理select语句以及连接表.可以帮助 ...
- 学习计划 mysql desc表结构分析
在完成数据表建表后,我们需要知道我们的表结构是什么,有没有和构造表时差异的地方. -- 简单查看表结构 desc 表名 这里拿数据库的一张表中做示例 mysql> desc rental; +- ...
- 重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践
一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库 ...
- Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived
文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...
- mysql学习(3)-linux下mysql主从复制
前言:为什么MySQL要做主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...
- 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 ...
随机推荐
- vmware下虚拟机不能上网问题解决
这个问题困扰了好久,vmware下装的虚拟机可以通过DHCP获取单独IP,但当用到管控较严格的环境,需要它与主机共享IP时,就不好使了. 今天在一篇文章中找到答案,如下图,windows系统中要启动V ...
- Nginx 用户认证
访问一些比较私密的页面 ( 如管理后台,数据后台 ) 时,我们就可以设置访问该页面时需要使用用户名和密码进行验证,这就是用户认证 [root@localhost ~]$ cat /usr/local/ ...
- 使用 Selenium
Selenium 简介 Selenium 基本用法 Selenium 查找节点 Selenium 节点交互 Selenium 动作链 Selenium 执行 JavaScript Selenium 获 ...
- codeblocks编码设置
注意编码统一,即文件编码和编译时的编码统一即可. codeblock13.12下: 文件编码: setting -> editor ->general setting -> othe ...
- Struts在Web.xml中的配置及Struts1和Struts2的区别
(1)配置Struts的ActionServlet <servlet>元素来声明ActionServlet <servlet-name>元素:用来定义Servle ...
- Linux设备驱动剖析之IIC(一)
写在前面 由于IIC总线只需要两根线就可以完成读写操作,而且通信协议简单,一条总线上可以挂载多个设备,因此被广泛使用.但是IIC总线有一个缺点,就是传输速率比较低.本文基于Linux-2.6.36版本 ...
- WP8.1学习系列(第二十六章)——控件模板
在本文中 自定义控件模板示例 指定控件的可视结构. 指定控件的可视行为 使用工具轻松处理主题 控件和辅助功能 了解有关控件默认模板的详细信息 控件模板中的主题资源 相关主题 在 XAML 框架中,如果 ...
- 【Spring Boot && Spring Cloud系列】那些Spring Boot中踩过的坑
一.不连接数据库启动springboot报错 Cannot determine embedded database driver class for database type NONE 原因:Spr ...
- 二叉树的实现(Java语言描述)
实现二叉树 并先序遍历之. package 二叉树的实现; public class BinaryTree<T> { class Node { int value; // 该节点存储的 ...
- gradle-4.1-all.zip
1. https://services.gradle.org/distributions/ https://services.gradle.org/distributions/gradle-4.1-a ...