MySQL主从搭建--保姆级教学

MYSQL主从搭建步骤

主节点

# 进入目录
cd /opt# 下载安装包
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz# 解压
tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz# 拷贝到/usr/local
mv /opt/mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local# 进入/usr/local
cd /usr/local# 修改名称为mysql-8.0.20
mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql-8.0.20# 创建存放数据文件夹
mkdir /usr/local/mysql-8.0.20/data# 创建用户及用户组
groupadd mysql
useradd -g mysql mysql# 授权
chown -R mysql.mysql /usr/local/mysql-8.0.20# 初始化数据库(记录临时密码)
cd /usr/local/mysql-8.0.20/./bin/mysqld --user=mysql --lower-case-table-names=1 --basedir=/usr/local/mysql-8.0.20/ --datadir=/usr/local/mysql-8.0.20/data/ --initialize ;# 配置my.cnf
vi /etc/my.cnf# 清空,使用下面内容
// 文件内容开始[mysqld]
basedir=/usr/local/mysql-8.0.20
datadir=/usr/local/mysql-8.0.20/data
character-set-server=utf8
lower-case-table-names=1
default_authentication_plugin=mysql_native_password# 主从复制-主机配置
# 主服务器唯一ID
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置需要复制的数据库(可设置多个)
binlog-do-db=test
# 设置logbin格式
binlog_format=STATEMENT// 文件内容结束# 建立Mysql服务
cp -a ./support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql# 检查服务是否生效
chkconfig --list mysql# 启动、停止、重启
service mysql start
service mysql stop
service mysql restart# 创建软连接
ln -s /usr/local/mysql-8.0.20/bin/mysql /usr/bin # 登录(使用临时密码)
mysql -uroot -p# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new password';# 退出,使用新密码登录
quit
mysql -uroot -p# 修改root权限,增加远程连接
use mysql
update user set host ='%' where user='root';
alter user 'root'@'%' identified with mysql_native_password by 'new password';
flush privileges;# 退出
quit

从节点

# 进入目录
cd /opt# 下载安装包
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz# 解压
tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz# 拷贝到/usr/local
mv /opt/mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local# 进入/usr/local
cd /usr/local# 修改名称为mysql-8.0.20
mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql-8.0.20# 创建存放数据文件夹
mkdir /usr/local/mysql-8.0.20/data# 创建用户及用户组
groupadd mysql
useradd -g mysql mysql# 授权
chown -R mysql.mysql /usr/local/mysql-8.0.20# 初始化数据库(记录临时密码)
cd /usr/local/mysql-8.0.20/./bin/mysqld --user=mysql --lower-case-table-names=1 --basedir=/usr/local/mysql-8.0.20/ --datadir=/usr/local/mysql-8.0.20/data/ --initialize ;# 配置my.cnf
vi /etc/my.cnf# 清空,使用下面内容
// 文件内容开始[mysqld]
basedir=/usr/local/mysql-8.0.20
datadir=/usr/local/mysql-8.0.20/data
character-set-server=utf8
lower-case-table-names=1
default_authentication_plugin=mysql_native_password# 主从复制-从机配置
# 从服务器唯一ID
server-id=2
# 启用中继日志
relay-log=mysql-relay// 文件内容结束# 建立Mysql服务
cp -a ./support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql# 检查服务是否生效
chkconfig --list mysql# 启动、停止、重启
service mysql start
service mysql stop
service mysql restart# 创建软连接
ln -s /usr/local/mysql-8.0.20/bin/mysql /usr/bin # 登录(使用临时密码)
mysql -uroot -p# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new password';# 退出,使用新密码登录
quit
mysql -uroot -p# 修改root权限,增加远程连接
use mysql
update user set host ='%' where user='root';
alter user 'root'@'%' identified with mysql_native_password by 'new password';
flush privileges;# 退出
quit
  • 关闭主从数据库服务器防火墙或开放3306端口
# 查看防火墙状态
systemctl status firewalld# 关闭防火墙
systemctl stop firewalld
  • 主从数据库测试是否已经可以远程访问
# 主数据库服务器测试从数据库
mysql -uroot -p -h192.168.182.132(从节点ip) -P3306# 从数据库服务器测试主数据库
mysql -uroot -p -h192.168.182.128(主节点ip) -P3306
  • 主数据库创建用户slave并授权
# 登录
mysql -uroot -p# 创建用户
create user 'slave'@'%' identified with mysql_native_password by 'password';# 授权
grant replication slave on *.* to 'slave'@'%';# 刷新权限
flush privileges;
  • 从数据库验证slave用户是否可用
mysql -uslave -p -h192.168.182.128(主节点) -P3306
  • 主数据库查询服务ID及Master状态
# 登录
mysql -uroot -p# 查询server_id是否可配置文件中一致
show variables like 'server_id';# 若不一致,可设置临时ID(重启失效)
set global server_id = 1;# 查询Master状态,并记录 File 和 Position 的值
show master status;# 注意:执行完此步骤后退出主数据库,防止再次操作导致 File 和 Position 的值发生变化
  • 从数据库中设置主数据库
# 登录
mysql -uroot -p# 查询server_id是否可配置文件中一致
show variables like 'server_id';# 若不一致,可设置临时ID(重启失效)
set global server_id = 2;# 设置主数据库参数
change master to master_host='192.168.182.128',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156;#注意:master_log_file和master_log_pos为主节点中执行show master status;后的值!!!
#注意:master_log_file和master_log_pos为主节点中执行show master status;后的值!!!
#注意:master_log_file和master_log_pos为主节点中执行show master status;后的值!!!# 开始同步
start slave;# 若出现错误,则停止同步,重置后再次启动
stop slave;
reset slave;
start slave;# 查询Slave状态
show slave status\G# 查看是否配置成功
# 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值。

测试

通过工具连接主从数据库或者在服务器连接。
  注意:主数据库的配置文件中配置了需要同步的数据库,因此只会同步配置的数据库,不配置则同步全部。

# 在主数据库创建数据库test
create database test;# 从数据库查看
show databases;# 在主数据库创建表
use test;
create table t_user(id int, name varchar(20));# 插入数据
insert into t_user values(1, 'C3Stones');# 在从数据库查看
use test;
select * from t_user;# 其他删改查操作请自行测试

异常

1.Slave_IO_Running为NO

问题原因:

(1)网络不通

(2)防火墙端口未开放

(3)mysql账户密码错误

(4)mysql主从机配置文件写错

(5)配置从机连接语法错误

(6)主机未开放账户连接权限

解决步骤:

(1)网络不通:用ping指令尝试是否可以接收到返回的数据

(2)防火墙端口未开放:

1:查看防火状态
systemctl status firewalld
service  iptables status2:暂时关闭防火墙
systemctl stop firewalld
service  iptables stop3:永久关闭防火墙
systemctl disable firewalld
chkconfig iptables off4:重启防火墙
systemctl enable firewalld
service iptables restart 

(3)mysql账户密码错误:用"mysql -u用户名 -p密码 -h主机ip"尝试登录主机

(4)主数据库参数设置错误(注意此条命令的参数)

change master to master_host='192.168.182.128',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156;

若配置错误

1.停止已经启动的绑定
stop slave;2.重置绑定
reset master;3.重新配置、执行复制主机命令
change master to master_host='192.168.182.128',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156;4.启动复制
start slave;
2.Slave_SQL_Running为NO
原因
主节点中有数据库test,执行drop database test时成功,但是从节点中没有test库,所以执行失败。此失败不对数据库造成影响,所以可忽略,选择跳过此处错误。#停止从服务
mysql> stop slave;  #表示跳过一步错误,后面的数字可变 
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;#重启slave服务
mysql> start slave;之后再用mysql> show slave status\G 查看: 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 
ok,现在主从同步状态正常了。。。

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

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

相关文章

【IDEA】-使用IDEA查看类之间的依赖关系

1、父子类的继承、实现关系 1.1、使用CTRL Alt U 选择 java class 依据光标实际指向的类位置 用实心箭头表示泛化关系 是一种继承的关系,指向父类 可以提前设置需要显示的类的属性、方法等信息 快捷键 Ctrl Alt S ,然后搜索 Diagrams 1.2、使用…

python知识继续学习

1、计算机表示小数是有误差的,下面的5就是误差 2、在python中,所有的非0数字都是True,零是False。所有的非空字符串都是True,空字符串是False。空列表是False。在python的基本数据类型中,表示空的东西都是False&#x…

数据结构(三)循环链表 约瑟夫环

文章目录 一、循环链表(一)概念(二)示意图(三)操作1. 创建循环链表(1)函数声明(2)注意点(3)代码实现 2. 插入(头插&#x…

【linux】运维-基础知识-认知hahoop周边

1. HDFS HDFS(Hadoop Distributed File System)–Hadoop分布式文件存储系统 源自于Google的GFS论文,HDFS是GFS的克隆版 HDFS是Hadoop中数据存储和管理的基础 他是一个高容错的系统,能够自动解决硬件故障,eg&#xff1a…

【Linux 网络编程】网络的背景、协议的分层知识!

文章目录 1. 计算机网络背景2. 认识 "协议"3. 协议分层 1. 计算机网络背景 网络互联: 多台计算机连接在一起, 完成数据共享; 🍎局域网(LAN----Local Area Network): 计算机数量更多了, 通过交换机和路由器连接。 🍎 广…

多模态模型入门:BLIP与OWL-ViT

BLIP 数据预处理 CapFilt:标题和过滤 由于多模态模型需要大量数据集,因此通常必须使用图像和替代文本 (alt-text) 对从互联网上抓取这些数据集。然而,替代文本通常不能准确描述图像的视觉内容,使其成为噪声信号,对于…

MAC M1 —— Install

文章目录 MAC M1 —— Install安装IDEA安装JDK安装Maven安装brew无法创建文件 /data/serverMac 修改终端用户名(主机名)PyCharm MAC M1 —— Install 安装IDEA 关键词:2020到2021.3的激活步骤。找下Download文件夹 安装JDK 在个人的电脑上…

思维+滑动窗口,LeetCode 2831. 找出最长等值子数组

目录 一、题目 1、题目描述 2、接口描述 python3 cpp JS 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 python3 cpp JS 一、题目 1、题目描述 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 如果子数组中所有元素都相等,则认…

TypeScript 学习笔记(十一):TypeScript 与微服务架构的结合应用

TypeScript 学习笔记(十一):TypeScript 与微服务架构的结合应用 1. 引言 在前几篇学习笔记中,我们探讨了 TypeScript 的基础知识、前后端框架的结合应用、测试与调试技巧、数据库以及 GraphQL 的结合应用。本篇将重点介绍 TypeScript 与微服务架构的结合应用,包括如何使…

mysql数据库管理-mysqlbinlog备份与恢复,主备复制分析

由于服务器生成的二进制日志文件以二进制格式保存,所以如果想要检查这些文件的文本格式, 就会用到mysqlbinlog日志管理工具。 mysqlbinlog的具体用法如下: shell> mysqlbinlog [options] log-files1 log-files2. . option有很多选项&…

《探索Stable Diffusion:AI绘画的创意之路与实战秘籍》

《Stable Diffusion AI 绘画从提示词到模型出图》介绍了 Stable Diffusion AI 绘画工具及其使用技巧。书中内容分为两部分:“基础操作篇”,讲解了 SD 文生图、图生图、提示词、模型、ControlNet 插件等核心技术的应用,帮助读者快速从新手成长…

mysql仿照find_in_set写了一个replace_in_set函数,英文逗号拼接字符串指定替换

开发中使用mysql5.7版本数据库,对于英文逗号拼接的字符串,想要替换其中指定的字符串,找不到数据库函数支持,自己写了一个,实测好用! /*类似find_in_set,按英文逗号拆分字段,找出指定的旧字符串,替换成新字…

Python库之retrying的高级用法深度解析

Python库之retrying的高级用法深度解析 概述 retrying 是一个Python库,它通过装饰器的方式简化了代码中重试机制的实现。本文将深入探讨retrying库的高级用法,帮助开发者更有效地利用它来增强程序的稳定性和健壮性。 安装 首先,确保你已经…

java中,怎样用最简单方法实现写word文档

在跨平台环境中实现写word时,如果用现成的库,就会涉及跨平台兼容性问题,比如在安卓与java中实现写word的功能。还有一个问题就是,完全用程序生成word文档,工作量较大。所以采用了模板替换的方法。 docx文档本质就是一…

深度学习之学习率调度器Scheduler介绍

调度器是深度学习训练过程中非常重要的一部分,它用于动态调整模型的学习率,从而提高训练效率和最终性能。 1. 为什么需要学习率调度器? 深度学习训练中,学习率是一个非常关键的超参数。合适的学习率可以确保模型快速收敛并获得良好的性能。 但是在训练过程中,最优的学习率会随…

算法与数据结构:二叉排序树与AVL树

ACM大牛带你玩转算法与数据结构-课程资料 本笔记属于船说系列课程之一,课程链接: 哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep66799?csourceprivate_space_class_null&spm_id_from333.999.0.0 你也可以选择购买『船说系列课程-年度会…

python判断字符串有无小数点有的话去掉小数点后面的数

python判断字符串有无小数点有的话去掉小数点后面的数 可以使用Python的字符串方法split()和strip()来判断和去除字符串中小数点后的数。 def remove_decimal_part(s):parts s.split(.)if len(parts) > 1:return parts[0]else:return s# 示例代码 s1 "123.456"…

javascript极简Date对象总结

new Date()和Date.now() new Date() 返回的是一个包含年月日时分秒的时间Date.now() 返回的是1970年1月1日0时0分0秒,到现在的时间毫秒数 时间格式化 let date new Date();let y date.getFullYear(); let m date.getMonth(); //返回值1真实月份 let d date.g…

# AI作画原理:生成对抗网络(GAN)的原理与应用

AI作画原理:生成对抗网络(GAN)的原理与应用 现在,AI已经可以画出非常逼真的图像了。那么,AI是怎么做到这一点的呢? 深度学习与生成对抗网络(GAN) AI画画的核心技术之一是深度学习&…

从java.util.Date到java.time.LocalDateTime:Java日期时间处理的现代进化

在深入探究Java日期时间管理的进化轨迹中,java.time.LocalDateTime与传统java.util.Date之间的差异凸显了现代软件工程对时间处理精准度与灵活性的更高要求。本文旨在通过详尽分析两者特性与实践案例,展现Java 8引入的日期时间API如何革新了这一基础而又…