主从复制原理及配置

news2024/11/26 1:52:45

角色不生效:

在配置文件中添加 activate_all_roles_on_login=on

glibc安装,my.cnf在项目目录之下

rpm安装,my.cnf文件在/etc/my.cnf

主从复制

备份的三种类型:

热备份

物理备份

逻辑备份

HA:高可用集群

复制原理:
1. replication,可以实现将数据从⼀台数据库服务器(master)复制到多台数据库服务器slave
2. 默认情况下,replication属于异步复制
主从复制核心思路:
1. slave和master必须安装相同的msyql版本
2. master开启⼆进制⽇志,slave必须开始relay⽇志
3. master端和slava端的server-id不能⼀致

主从复制配置:

配置两台机器:主数据库服务器和从数据库服务器

两台服务器都要安装rsync,ntpdata,关闭防火墙和selinux

yum -y install rsync

yum -y install ntpdata

ntpdate cn.ntp.org.cn   //同步时间

主数据库服务器:192.168.118.20

1.使用脚本安装glibc:

xz文件和sh文件都在家目录

2.连接数据库:

[root@master-mysql ~]# mysql -p
Enter password: 

3.修改密码:

mysql> alter user 'root'@'localhost' identified by 'root';
Query OK, 0 rows affected (0.00 sec)

4.修改配置文件:

[root@master-mysql ~]# vim /usr/local/mysql/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3306
log-error=/usr/local/mysql/data/db01-master.err
log-bin=/usr/local/mysql/data/binlog      //共享给从服务器
server-id=10       //主服务器和从服务的id不能相同
character_set_server=utf8mb4

5.重启服务:

[root@master-mysql ~]# service mysql8 restart

6.设置开机自启:

[root@master-mysql ~]# chkconfig --add mysql8
[root@master-mysql ~]# chkconfig mysql8 on
[root@master-mysql ~]# chkconfig --list

从数据库服务器:192.168.118.30

不能初始化,不能有自己的数据:

相对于主服务器的安装与配置,从服务器不需要初始化,他的数据都来⾃于主服务器,其他都⼀样

1.利用脚本安装mysql:

在脚本中要注释掉初始化和ssl的指令

2.编辑配置文件:

[root@slave-mysql ~]# vim /usr/local/mysql/my.cnf

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3310
log-error=/usr/local/mysql/data/db01-slave.err
relay-log=/usr/local/mysql/data/relaylog
server-id=11
character_set_server=utf8mb4

 

3.不启动服务

4.在主服务器上停用mysql

[root@master-mysql ~]# service mysql8 stop
Shutting down MySQL.. SUCCESS! 

5.删除主数据库服务器的auto.cnf ,保障两个数据一致:

master删除/usr/local/mysql/data/auto.cnf 每安装⼀个mysql软件,data数据⽬录都会产⽣⼀个auto.cnf⽂件,⾥⾯是⼀个唯⼀性编号,相当于每个⼈的身份证编号

[root@master-mysql ~]# ls /usr/local/mysql/data
auto.cnf   

[root@master-mysql ~]# rm -rf /usr/local/mysql/data/auto.cnf 

6.将master的data文件同步到slave:

[root@master-mysql ~]# rsync -av /usr/local/mysql/data root@192.168.118.30:/usr/local/mysql/
7.开启主服务器和从服务器的服务

[root@master-mysql ~]# service mysql8 start
Starting MySQL.. SUCCESS! 
[root@slave-mysql ~]# service mysql8 start
Starting MySQL.Logging to '/usr/local/mysql/data/db01-slave.err'.
. SUCCESS! 

8.在从服务器上使用主服务器的密码连接mysql:可以连接,是因为从主服务上传过来了data文件

[root@slave-mysql ~]# mysql -P3310 -proot

主服务器:

1.在主服务器上为从服务器创建用户,并给权限:

从服务里面访问主服务器的工具

mysql> create user 'slave'@'%' identified by 'slave';
Query OK, 0 rows affected (0.01 sec)

mysql> grant replication slave on *.* to 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

2.锁定表

mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)

 

3.查看二进制文件

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000006 |     1807 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

 

从服务器:

[root@slave-mysql ~]#mysql  -uroot -P3310

mysql> change master to master_host='192.168.118.20',master_user='slave',master_password='slave',master_port=3306,master_log_file='binlog.000006',master_log_pos=1807;
Query OK, 0 rows affected, 9 warnings (0.02 sec)

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> show slave status\G

*************************** 1. row ***************************
               Slave_IO_State: Connecting to source
                  Master_Host: 192.168.118.20
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: binlog.000006
          Read_Master_Log_Pos: 860
               Relay_Log_File: relaylog.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: binlog.000006
             Slave_IO_Running: Connecting      //它也必须为Yes
            Slave_SQL_Running: Yes

原因分析:

8.0的版本与7.0版本不同,在8.0版本中,要使 Slave_IO_Running:为yes,做以下操作:在从服务器上

1.获取远程master主机的公钥:

mysql -uslave -pslave -h192.168.118.20 -P3306 --get-server-public-key

退出:quit

2.登录slave服务器本地的数据库:

[root@slave-mysql ~]# mysql -proot -P3310

3.停用slave服务,重新设置slave服务:

mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> reset slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> change master to master_host='192.168.118.20',master_user='slave',master_password='slave',master_port=3306,master_log_file='binlog.000006',master_log_pos=1807;
Query OK, 0 rows affected, 9 warnings (0.02 sec)

4.启动slave服务:

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.118.20
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: binlog.000006
          Read_Master_Log_Pos: 1807
               Relay_Log_File: relaylog.000002
                Relay_Log_Pos: 323
        Relay_Master_Log_File: binlog.000006
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

主从服务器的验证:

在主服务器上创建一个库test,一个表user,往里面插入一条数据

mysql>unlock tables;   //解锁

mysql> create database if not exists test;

mysql> use test;
Database changed
mysql> create table user(id int primary key,username varchar(50),password varchar(50));
Query OK, 0 rows affected (0.02 sec)

 

mysql> insert into user values(1,'zhangsan','zjangsan');
Query OK, 1 row affected (0.00 sec)

mysql> select * from user;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | zhangsan | zjangsan |
+----+----------+----------+
1 row in set (0.00 sec)

 

在从服务器上验证,是否同步了master上的内容:

mysql> select *from user;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | zhangsan | zjangsan |
+----+----------+----------+
1 row in set (0.00 sec)

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实现Kubernetes中的抢占式Pod与固定Pod的弹性伸缩:一项全面指南

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

c++STL中list介绍,模拟实现和list与vector对比

目录 前言 : 1. list的介绍及使用 1.1list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list的迭代器失效 2. list的模拟实现 3. list与vector的对…

GuLi商城-商品服务-API-新增商品-调用远程服务保存优惠等信息

优惠券服务要开启服务注册和发现功能: 会员服务要开启远程调用功能: 可以写在消费端: 我还是习惯写在服务提供者一端: package com.nanjing.gulimall.coupon.feign;import com.nanjing.common.to.SpuBoundTo; import com.nanjing.common.utils.R; import org.springframewo…

Docker安装portainer汉化版

1、拉取汉化版Portainer镜像 docker pull 6053537/portainer-ce 2、创建数据卷 为了保存Portainer的数据和配置,应该创建一个Docker卷: docker volume create portainer_data 3、运行Portainer容器 docker run -d \--name portainer \-p 9000:9000…

企业社会责任(CSR)国际标准对企业的发展有什么好处?

企业社会责任(CSR)国际标准对企业的发展具有多方面的好处,包括但不限于以下几点: 提升企业声誉和形象 ​符合国际标准展示了企业对社会和环境的积极关注,有助于在消费者、投资者、合作伙伴和公众中树立良好的声誉&…

MyBatis快速学习

目录 前言 MyBatis的具体使用 一些小工具:MyBatisX 常见问题: 1.表中字段名和实体属性名不一致 2.按条件查询(单条件)时的,查询条件怎么编写 3.按条件查询(多条件) 4.多条件查询时&…

需要增重的小猫看过来!猫咪很瘦吃不胖是怎么回事?增重猫罐头推荐!

前几天医院来了只小母猫,7个月了,现在刚5斤。主人反映她平时干饭积极,能吃能睡,能喝能拉,就是不长肉。虽然大家都说母猫确实没有公猫容易胖,但是这只猫咪确实也长得也太慢了。其实我们医院接到过不少这样的…

对于springboot无法连接redis解决方案

对于springboot无法连接redis解决方案 一、测试是否能在本地应用上访问到你的redis(如果是部署在linux上的话)1. 开启telnet功能2. 开始测试端口是否能访问到(适用于所有,包括MQ)3. 开放6379端口4. 看spring的配置文件…

CANdela/Diva系列5--CANdela Studio的Data Types功能介绍

Data Types在CDD文件中是一个很重要的部分,它能够便捷地解析DID/RID的数据内容和0x19服务的相关子服务,同时能够能够全局定义一些变量,达到整个CDD文件公用的效果。 目录 1. Raw Value: 2. Text Table: 3. Linear: 4. Characteristic Cu…

生活需要BGM,悠律凝声环开放式耳机全场景通用

如今,BGM围绕着我们的生活,音乐是生活的调料品,深受运动爱好者的喜爱,不但能够缓解锻炼时的单调,也能够更好地激发我们的身体状态。最近我入手的悠律凝声环ringbuds pro就是这样一款特别适合运动场景使用。 开放式耳机…

go语言day22 gin-vue-admin全栈项目的依赖安装

flipped-aurora/gin-vue-admin: 🚀ViteVue3Gin的开发基础平台,支持TS和JS混用。它集成了JWT鉴权、权限管理、动态路由、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下载、代码生成器【可AI辅助】、表单生成器和可配置的导入导出等开发必备功能…

从零开始学习性能测试

学习目标 理解性能测试定义、目的理解常见性能测试策略理解性能指标理解性能测试方法学习性能测试工具 什么是性能测试 测试中的非功能测试其实范围比较广,性能、稳定性、安全性等都可以放进这个范畴。非功能测试,一般比功能测试门槛高些,多数…

谷歌账号被停用了,申诉界面可以下载数据,有必要吗?有用吗?

有的朋友在使用谷歌账号的时候,登录遇到“您的账号已停用”的情形。 这个界面提示说可以下载账号相关的数据,那么,谷歌账号被停用后如何下载自己谷歌账号的数据呢?能下载哪些数据Une?下载的数据有用吗? 这…

记录|MVS和VM软件使用记录

目录 前言一、常用属性二、触发模式选择三、操作注意点四、录像、抓拍功能五、VM软件六、VM软件界面介绍七、VM软件运行间隔八、VM软件图像源九、VM软件相机管理十、获取图像十一、方案存储十一、相机拍摄彩图转换颜色转换快速匹配特征模板:运行参数 十二、位置修正…

力扣热题100_二叉树_226_翻转二叉树

文章目录 题目链接解题思路解题代码 题目链接 226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: …

63 变量的作用域

变量起作用的代码范围称为变量的作用域,不同作用域内同名变量之间互不影响。在函数外部和函数内部定义的变量,其作用域是不同的,函数内部定义的变量一般为局部变量,在函数外部定义的变量为全局变量。不管是局部变量还是全局变量&a…

【网络安全】探索AI 聊天机器人工作流程实现RCE

未经许可,不得转载。 文章目录 前言正文前言 我发现了一个广泛使用的AI聊天机器人平台中的远程代码执行漏洞。该漏洞存在于聊天机器人的自定义工作流响应代码中,这些工作流允许开发人员通过创建定制的流程来扩展机器人的功能。 正文 在浏览自动化聊天机器人的多个特定功能…

爱国者vs格行vs吉客猫随身wifi综合测评!哪款随身WiFi最好用?随身wifi哪个品牌性价比最高?随身WiFi哪个网速最快?

近两年,随身WiFi作为便携上网的解决方案,备受欢迎。不过市场上品牌众多,各有千秋。今天,我们将聚焦于爱国者、格行以及吉客猫这三个热门品牌,通过详细对比,为您揭示每款随身WiFi的特点和区别,方…

VMware14安装图文

1.下载 通过百度网盘分享的文件:VMware14安装图文 链接:https://pan.baidu.com/s/1t2kHDphI_z1guqp0P-NO_A 提取码:q3j0 --来自百度网盘超级会员V3的分享 2.安装

Python程序组成部分

此文为《Python入门经典以解决计算问题为导向的Python编程实践》27-31页的笔记。 程序组成部分 一、模块二、表达式和语句三、空白缩进续行 四、注释五、特殊元素1、关键字2、运算符3、标点符号(又名分隔符)4、字面量 六、对象命名(很重要&a…