MySQL之主从复制

概述:

将主库的数据 变更同步到从库,从而保证主库和从库数据一致。

它的作用是 数据备份,失败迁移,读写分离,降低单库读写压力

原理:

主服务器上面的任何修改都会保存在二进制日志( Bin-log日志) 里面。 从服务器上面启动一个I/O线程, 连接到主服务器上面请求读取二进制(Bin-log)日志,然后把读取到的二进制日志写到本地的Realy-log(中继日志)里面。 从服务器上面同时开启一个SQL线程,读取Realy-log(中继日志),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。

搭建:

1.准备服务器

2.配置主库

3.配置从库

4.测试主从复制

实践

1.首先准备俩台安装MySQL的纯净服务器 

主库:192.168.231.153

从库:192.168.231.136  

关闭防火墙与selinux

在俩台服务器做域名解析

vim /etc/hosts

192.168.231.153  master

192.168.231.136  slave

俩台服务器都做如下操作:
同步时间,修改时区
#ntpdate time.windows.com
#timedatectl  set-timezero Asia/Shanghai修改主机名
#hostnamectl set-hostname  zhuku
#hostnamectl set-hostname   congku配置静态ip
# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
将dhcp改为static
IPADDR=本机ip
GATEWAY=192.168.231.2
NETMASK=255.255.255.0
DNS1=114.114.114.114
DNS2=8.8.8.8

清理环境在安装MySQL之前

俩台服务器都需要做的操作
[root@slave ~]#yum -y erase `rpm -qa |  grep -E "mysql|mariadb"`
[root@slave ~]# rm -rf /etc/my*  /var/lib/mysql* /var/log/mysql*
#检查一下,环境清理干净没有
[root@slave ~]# [[ ! -f /etc/my.cnf ]] && [[ ! -d /var/lib/mysql ]] && [[ ! -f /usr/bin/mysql ]] && echo "数据库已清除" || echo "数据库未清理"

安装mysql

启动服务:
# systemctl start mysqld
寻找密码
grep password  /var/log/mysqld.log 
也可以
mysqladmin -p"`awk '/temporary password/{p=$NF}END{print p}' /var/log/mysqld.log`" password 'Qianfeng@123'
这条命令是直接登录MySQL,顺便将密码修改以后 可以登录也可以是,获取新的MySQL的密码
#  awk  '/temporary password/{p=$NF}END{print p}' /var/log/mysqld.log

2.配置主库:

创建日志目录并赋予权限

# mkdir /var/log/mysql
# chown  -R mysql.mysql /var/log/mysql

编辑主库服务器的配置文件 /etc/my.cnf

[mysqld]
log-bin=/var/log/mysql/mysql-bin       #启用二进制文件日志记录
server-id=1          # 服务id,保证整个集群环境唯一
read-only=0         #1是只读,0是读写

重启服务

# systemctl restart mysqld

在主库登录MySQL,创建用户

为了用户在从库中用来连接主库的账号


mysql>  grant replication slave on *.* to  '用户名'@'ip' identified by '密码';  
这是为用户分配主从复制的权限,并创建用户刷新:
mysql> flush  privileges;

查看二进制日志坐标

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

3.配置从库

编辑从库服务器的配置文件my.cnf

[mysqld]
server-id=2
read-only=1     #普通用户一般只有只读,可以不写

重启mysql服务

# systemctl restart mysqld

登录mysql

此处登录的是你从库mysql的root用户登录的账号与密码,不是在主库创建的用户

mysql>  change master to master_host='主库的ip',master_user='连接主库用户名',master_password='连接主库用户的密码',master_log_file='日志文件名',mastre_log_pos='日志位置';日志位置就是在主库show master status查出来那个数字   ----313+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      313 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

当你第一次记不住这么多命令时,可以直接

mysql > ? change master to出现下列,直接复制CHANGE MASTER TOMASTER_HOST='source2.example.com',MASTER_USER='replication',MASTER_PASSWORD='password',MASTER_PORT=3306,MASTER_LOG_FILE='source2-bin.001',MASTER_LOG_POS=4,MASTER_CONNECT_RETRY=10;然后: mysql > ?e
进入文本编辑器内,将复制的 内容进行修改 然后保存即可

启动:

mysql> start slave;

查看主从同步状态:

mysql> show slave status\G*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.231.153   -----主库的ipMaster_User: itcast     -----用来连接主库的用户名   Master_Port: 3306  ------端口Connect_Retry: 60Master_Log_File: mysql-bin.000001          -----二进制日志名字Read_Master_Log_Pos: 313Relay_Log_File: congku-relay-bin.000002   -----中继日志名字Relay_Log_Pos: 479Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: Yes         --------主要看俩个IO线程是否成功启动Slave_SQL_Running: Yes         --------看SQL线程是否成功启动Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: 

4.测试主从复制

主库!
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| company            |
| db1                |
| mysql              |
| performance_schema |
| school             |
| sys                |
| xian               |
+--------------------+
8 rows in set (0.00 sec)从库:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| xian               |
+--------------------+
5 rows in set (0.00 sec)

这是因为配置主从复制是在主库已经存在这些库以后配置的

!!!!在主库创建库,创建表,写入数据
mysql> create database db2;
mysql> create table db2.zhucong(id int,name varchar(50),age int);mysql> insert into zhucong(id,name,age) values(1,'aaa',18),values(2,'bbb',19) ,(3,'ccc',20);mysql> select * from zhucong;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | aaa  |   18 |
|    2 | bbb  |   19 |
|    3 | ccc  |   20 |
+------+------+------+
3 rows in set (0.00 sec)!!!在从库查看
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db2                |
| mysql              |
| performance_schema |
| sys                |
| xian               |
+--------------------+mysql> use db2;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+---------------+
| Tables_in_db2 |
+---------------+
| zhucong       |
+---------------+
1 row in set (0.00 sec)mysql> select * from zhucong;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | aaa  |   18 |
|    2 | bbb  |   19 |
|    3 | ccc  |   20 |
+------+------+------+

修改主库中的表数据,查看从库是否有变化

主库:
mysql> update zhucong set age=21;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0mysql> select * from zhucong;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | aaa  |   21 |
|    2 | bbb  |   21 |
|    3 | ccc  |   21 |
+------+------+------+
3 rows in set (0.00 sec)查看从库:
mysql> select * from zhucong;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | aaa  |   21 |
|    2 | bbb  |   21 |
|    3 | ccc  |   21 |
+------+------+------+
3 rows in set (0.00 sec)

配置好主从复制以后,从库记录的只是主库以后的日志文件,要想从库备份主库之前的可以,先将主库之前的数据库文件备份然后拷贝到从库,然后从库在进行恢复即可。

当从库所在的服务器关闭后,主库所执行操作,当从库服务器再次开启时,从库服务器会自动同步主库服务器

附加:

获取本机的uuid

[root@slave ~]# uuidgen 
b392cd4c-9e3d-4596-9a72-0805c2162c8f

修改本机的uuid

#  vim /var/lib/mysql/auto.cnf

base64加密与解密

[root@slave mysql]# echo “马龙” | base64 
4oCc6ams6b6Z4oCdCg==
[root@slave mysql]# echo "4oCc6ams6b6Z4oCdCg==" | base64 -d
“马龙”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/128827.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发者指南:如何集成一对一直播美颜SDK到你的应用中

本文将为开发者们提供一个详细的指南,教你如何将一对一直播美颜SDK集成到你的应用中,以提供更具吸引力的直播体验。 -为什么选择一对一直播美颜SDK? 在开始之前,让我们先明确一下为什么选择一对一直播美颜SDK是一个明智的决定。…

【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】

GUI系列操作 1.枚举菜单实现文件1:Assets/MyScript/Test1.cs代码如下: 文件2:Assets/MyScript/Editor/Test1Editor.cs代码如下: 测试一下新建一个场景,新建一个Empty 节点,用来测试枚举组件将文件1&#xf…

超高频RFID模具精细化生产管理方案

近二十年来,我国的模具行业经历了快速发展的阶段,然而,模具行业作为一个传统、复杂且竞争激烈的行业,企业往往以订单为导向,每个订单都需要进行新产品的开发,从客户需求分析、结构确定、报价、设计、物料准…

GhostNet原理解析及pytorch实现

论文:https://arxiv.org/abs/1911.11907 源码:https://github.com/huawei-noah/ghostnet 简要论述GhostNet的核心内容。 Ghost Net 1、Introduction 在训练良好的深度神经网络的特征图中,丰富甚至冗余的信息通常保证了对输入数据的全面理…

面试经典 150 题 4 —(数组 / 字符串)— 80. 删除有序数组中的重复项 II

80. 删除有序数组中的重复项 II 方法一 class Solution { public:int removeDuplicates(vector<int>& nums) {int len 0;for(auto num : nums)if(len < 2 || nums[len-2] ! num)nums[len] num;return len;} };方法二 class Solution { public:int removeDupli…

一文搞懂二叉树中序遍历的三种方法

系列文章&#xff1a; 相关题目&#xff1a; 94. 二叉树的中序遍历 中序遍历结果为&#xff1a;4 2 5 1 6 3 7 总体上分为两种框架&#xff0c;递归框架和非递归框架&#xff0c;递归框架又分为两种思路&#xff1a;分解思路和遍历思路。 递归 1、分解思路 【分解为子问题】…

LeetCode 1251. 平均售价

题目链接&#xff1a;1251. 平均售价 题目描述 表&#xff1a;Prices Column NameTypeproduct_idintstart_datedateend_datedatepriceint (product_id&#xff0c;start_date&#xff0c;end_date) 是 prices 表的主键&#xff08;具有唯一值的列的组合&#xff09;。 price…

【排序算法】插入排序

文章目录 一&#xff1a;基本概念1.1 介绍1.2 原理1.3 插入排序法思想 二&#xff1a;代码实现2.1 源码2.2 执行结果2.3 测试八万条数据 三&#xff1a;算法分析3.1 时间复杂度3.2 空间复杂度3.3 稳定性 一&#xff1a;基本概念 1.1 介绍 插入式排序属于内部排序法&#xff0…

项目设计:YOLOv5目标检测+机构光相机(intel d455和d435i)测距

1.介绍 1.1 Intel D455 Intel D455 是一款基于结构光&#xff08;Structured Light&#xff09;技术的深度相机。 与ToF相机不同&#xff0c;结构光相机使用另一种方法来获取物体的深度信息。它通过投射可视光谱中的红外结构光图案&#xff0c;然后从被拍摄物体表面反射回来…

【框架风格】解释器模式

1、描述 解释器框架风格&#xff08;Interpreter Framework Style&#xff09;是一种软件架构风格&#xff0c;其核心思想是构建一个解释器&#xff08;Interpreter&#xff09;来解释并执行特定领域或问题领域的语言或规则。以下是解释器框架风格的一些特点&#xff1a; 1. 领…

flink自定义窗口分配器

背景 我们知道处理常用的滑动窗口分配器&#xff0c;滚动窗口分配器&#xff0c;全局窗口分配器&#xff0c;会话窗口分配器外&#xff0c;我们可以实现自己的自定义窗口分配器&#xff0c;以实现我们的自己的窗口逻辑 自定义窗口分配器的实现 package wikiedits.assigner;i…

Kaadas凯迪仕助力亚运盛会,尽展品牌硬核科技与智能锁行业风采

9月23日至10月8日&#xff0c;亚洲最大规模体育赛事亚运会在杭州举办。作为国际性体育赛事&#xff0c;除赛中的各类竞赛项目外&#xff0c;杭州亚运会前后相关活动也吸引了大众目光的聚焦。 Kaadas凯迪仕智能锁作为此次杭州亚运会官方指定智能门锁&#xff0c;以#凯迪仕守护每…