建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

C.Z.Y

发帖: 7粉丝: 0

发消息 + 关注

发表于2021年02月03日 17:46:06 563 4
直达本楼层的链接
楼主
显示全部楼层
[干货分享] 鲲鹏+openeuler环境中MySQL从库部署

前言

    继上篇部署javaweb环境后此次继续给我们的环境部署个远端的从库(多业务可以放同一台,此次实验做个演示新增步骤与此大致相同)

MySQL从库概述

 从库是让一台服务器的数据和其他服务器保持同步,即我们所说的从库。一台主库可以有多个从库,一台从又可以是另外一台从的主库。Mysql从库的原理就是从库的Mysql SLAVE I/O引擎读取主库的binlog,将binlog写到本地成为relaylog,之后Mysql的SQL引擎读取本地的relaylog,写入本地数据库。

实验环境

    准备2台鲲鹏云主机,云主机可以随意置于同地区或不同地区,根据业务需求确定,这里我们模拟2台云主机位于不同地区

    在两台服务器上安装mysql,安装过程可参照我之前发的一个分享其中第四步有完整的mysql安装操作,分享链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=105119

从库部署

    1.主从库权限开放

        这里我们需要确定要放通的权限有3项

        1.服务器安全组(默认3306端口,若主库mysql端口非3306则根据实际端口配置)

        这里我们先确认一下主库安全组是否有3306端口放通,很明显在下图中我们的安全组是没有放通3306的,那么我们需要对我们的从库放通3306端口(出于安全考虑,我们只开单IP而非全部放通)

        image.png

        点击上图上图中蓝色链接文字'更改安全组规则',进入后选择入方向规则->添加规则->输入端口,从库IP地址后点击确定

image.png

        2.服务器自身防火墙iptables

         由于openeuler默认未开启Firewall和iptables此时端口其实已经放通了,但实际业务安全考虑一定是有iptables或者Firewall的

        若有iptables限制可以使用以下命令开放(请修改从库IP)

iptables -A INPUT -p tcp -s 从库ip --dport 3306 -j ACCEPT

        3.mysql从库账号权限

#进入主库服务器的mysql,并添加从库账号
create user '账号'@'从库IP' identified by '密码';
GRANT REPLICATION SLAVE ON *.* TO '账号(与上面一致)'@'从库IP';
flush privileges;

        4.验证

#登录从库服务器telnet以下主库3306端口
如果没有安装telnet直接yum一下(yum install telnet -y)
telnet 主库ip 3306

    确认可以成功访问后继续往下

image.png

    可能出现的异常:

    1.端口依旧无法连通

    排查方向:防火墙,安全组

     2.已连通端口但是报(Host 'IP' is not allowed to connect to this MySQL serverConnection closed by foreign host.)

    排查方向:主库中的账号是否有对从库IP授权

    2.建立从库

        1.主库数据库dump传输至从库

#进入主库数据库目录
cd /home
mysqldump -S /data/mysql/run/mysql.sock -uroot -p密码 库名(这里是kp) >kpslave.sql
scp kpslave.sql 从库IP:/home
输入ssh密码

        2.登录从库建立数据库

cd /home
mysql -uroot -p密码 -S /data/mysql/run/mysql.sock

#进入数据库后创建同名数据库(这里创建kp)
create database kp;
#记录日志并刷入刚刚打包传输过来的sql
use kp
\T kpslave.log
source kpslave.sql
\t\q

#此时已退出数据库,执行以下命令确认刷入无报错
cat kpslave.log |grep ERROR

#确认无异常后我们重新进入数据创建同步
mysql -uroot -p密码 -S /data/mysql/run/mysql.sock

#确认同步默认关闭
show slave status\G
#结果是(Empty set (0.00 sec))即可,若不是执行stop slave;

        3.主库开启log-bin

#编辑my.cnf
vi /etc/my.cnf
#[mysqld]下加入
log_bin=log-bin

#加入后退出vi,并重启mysql
#这时进入mysql目录/data/mysql/data下可以看到logbin文件如图所示

image.png

        4.从库开启同步(登录从库数据库)

#进入从库数据库,先确认一下servier_id,主从库确认不同
show variables like 'server_id';
#若相同请修改my.cnf加入server_id配置并重启(这个1000可随意修改,不要和主库一样就行)
server-id=1000


#配置并开启同步
reset slave;
change master to
#主库IP需要修改
master_host='主库IP',
#kpslave为从库账号
master_user='kpslave',
#kpslave为从密码
master_password='kpslave',
master_port=3306,
#log-bin.000001是第一个要读取的logbin,主库如果已经跑了很久logbin请写dump前最后一个,这里使用000001
master_log_file='log-bin.000001',
master_log_pos=4;
start slave;

        5.验证(从库服务器mysql中),执行以下命令确认slave_io_running与slave_sql_running状态都为Yes

show slave status\G

image.png

        6.最终测试

        我们登陆从库与主库数据库查询tb_user表数据我们可以看到有2条测试数据

use kp
select * from tb_user

image.png

        查询后我们登陆"主库"给tb_user表插入一条数据

insert into tb_user value(null,"kptest","3e750cd4ff7ff35c573e406bdac4618a","6s6k17iiaxifjpwzbc1dtcqoccndusi8aaze","13888888888",0,0);

        随后登陆"从库"继续查询一下是否已经多出这一条数据

select * from tb_user

image.png

至此,我们的从库已搭建完成,希望对大家有所帮助

举报
分享

分享文章到朋友圈

分享文章到微博

发帖: 135粉丝: 15

发消息 + 关注

发表于2021年02月03日 18:22:03
直达本楼层的链接
沙发
显示全部楼层

感谢分享

评论
yd_219006201 2021-2-5 17:23 评论

1

... 查看全部
点赞 评论 引用 举报
发表于2021年02月03日 20:32:22
直达本楼层的链接
板凳
显示全部楼层

good~

点赞 评论 引用 举报

福建鲲鹏

发帖: 0粉丝: 0

发消息 + 关注

发表于2021年02月04日 08:50:21
直达本楼层的链接
地板
显示全部楼层

点赞 评论 引用 举报

Jack20

发帖: 118粉丝: 155

发消息 + 关注

发表于2021年02月04日 10:11:16
直达本楼层的链接
5#
显示全部楼层

谢谢分享

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册