首页 技术 正文
技术 2022年11月10日
0 收藏 861 点赞 4,190 浏览 2415 个字

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

主从复制

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

原理

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

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

例如:

  你想盗一个 QQ 号!

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

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

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

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

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

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

实践

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

准备两台虚拟机:

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

条件

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

配置主机【Master】

主要配置的参数有两个:

学习计划 mysql 主从复制

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)实践

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,495
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,909
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,741
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,496
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,134
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,298