docker二进制安装mysql_Docker搭建MySQL读写分离主从模式 分布式数据库中间件Mycat分库分表应用...

fe3cbf35b158492c4cd31ec854f0f831.png

一、MySQL读写分离主从模式

1. 下载镜像

docker pull mysql

当前最新版本:mysql Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)

2. 启动主节点并修改配置文件

docker run -it --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql bash

修改/etc/mysql/my.cnf配置文件(还得先apt update更新软件包列表才能安装vim等编辑工具,比较繁琐,所以可以选择先配置好my.cnf文件再docker run -v 挂载进容器)

配置文件 my.cnf 修改如下:

[mysqld]

pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql

# 以上是原有默认配置,add variables如下:

# 在同一个Master-Slave集群里不能有重复id

server-id = 3306

# 不配置默认3306

# port= 3306

# 二进制日志文件存储路径及名称(在docker容器内涉及到权限问题,所以直接写在datadir下)

log-bin = /var/lib/mysql/binlog

# 需要开启binlog的数据库,多个则配置多行binlog-do-db

binlog-do-db = training

# binlog-do-db= db2

# binlog-do-db= db3

# 密码认证方式(加密方式) MySQL 8.0+ 默认是caching_sha2_password

# 如果需要直接连接可以如下改回老版本的mysql_native_password或者create user时identified with mysql_native_password by 针对单个用户

# default_authentication_plugin= mysql_native_password

注:修改完配置文件后需要重启mysql才能生效,一般命令是systemctl restart mysqld,但是在docker容器中没有权限执行systemctl命令,所以选择退出容器后 docker restart

docker exec -it mysql bash

mysql -uroot -p [-hx.x.x.x -P3306]

# 创建用户, @"ip"可以用@"%",不限IP

create user "replica"@"x.x.x.x" identified by "123456";

# 赋予复制权限

GRANT REPLICATION SLAVE ON *.* to "replica"@"x.x.x.x";

FLUSH PRIVILEGES;

# 查看主机状态

show master status;

86088d241c89d4c956d47a8dcd6707ef.png

记下File和Position两个参数值在从库连接主库时将用到

3. 从节点配置

# 容器内依然使用3306端口,免去修改端口的麻烦,宿主机端口使用3307

docker run -it --name mysql_3307 -p 3307:3306 -e MYSQL_ROOT_PASSWORD mysql bash

从节点my.cnf配置主要修改server-id不同,不需要log-bin和binlog-do-db参数

[mysqld]

server-id = 3307

# 容器内端口

# port= 3306

# 读写分离,从库只读(0: 读写,1: 只读)

read_only= 1

# 限制super用户,read_only只限制普通用户写操作

super_read_only= 1

重启容器后生效

Ctrl+P+Q 快捷键

docker restart mysql_3307

docker exec -it mysql_3307

mysql -uroot -p123456# 如果容器内也使用3307端口,需跟上参数 -P3307

stop slave;

# 连接主机CHANGE MASTER TO option [, option] ...

change master to master_host="xxx.xxx.xxx.xx",

master_port=3306,

master_user="replica",

master_password="123456",

# 这两个参数要跟上述截图master status的参数值一致

master_log_file="binlog.000010",

master_log_pos=155,

# 默认使用caching_sha2_password加密方式时添加如下参数

get_master_public_key=1,

# 或者使用master_public_key_path指定主机公钥文件

master_public_key_path="/etc/mysql/master_rsa_public.key";

# 启动slave进程

# 查看从机状态

show slave statusG

至此主从复制配置完成,Slave_IO_Running和Slave_SQL_Running都为Yes说明开启主从同步成功,

否则可以查看Slave_SQL_Running_State状态查看失败原因,或者没有没有执行start slave;

046bd5e75b884831100b53961d9e10e6.png

41de449641a73ef9d8eec835962e61a4.png

change master的更多参数可见官网:https://dev.mysql.com/doc/refman/8.0/en/change-master-to.html

关于主机公钥文件获取:

进入master后show variables like "%caching_sha2_password%";

可以看到Caching_sha2_password_rsa_public_key或者key_path: public_key.pem,这个文件路径:/var/lib/mysql/public_key.pem

拷贝--BEGIN……END--这部分内容到从服务器,可以新建文件/etc/mysql/master_rsa_public.key写入。

change master时master_public_key_path="/etc/mysql/master_rsa_public.key"参数指定 ;

客户端登录时mysql -uroot -p --server-public-key-path=/etc/mysql/master_rsa_public.key指定

b2b13ec46b4a1869c79d9e036d6c970d.png

21e139e495575bf39d99ad1517208e4f.png

4. 备份主库已有数据

完成上述步骤后,后续对主机的写操作才会同步到从机,开启同步前主机已有数据并不会同步,需要备份后导入从库,再开启主从同步。

(1)备份前锁定主库,只允许读不允许写,防止备份过程中、开启主从同步前有新数据插入

mysql> show global variables like "%read_only%";

mysql> set global read_only=1;

mysql> set global super_read_only=1# 限制super用户写操作

# 如果当前不是super用户,需要限制super用户写操作就执行给所有表加读锁命令,但是当前连接不能退出,否则就自动释放锁了

mysql> flush tables with read lock;

(2)备份主库

mysqldump语法:

b9ba1f12a7184f4c172e59af6487d323.png

备份命令:

docker exec mysql /usr/bin/mysqldump -uroot -p123456 training > mysql_master_backup.sql

注:对于警告不要在命令行输入密码的问题,可以先在/etc/mysql/my.cn添加配置:

[mysqldump]

user= root

password= 123456

然后执行docker exec mysql mysqldump training > mysql_master_backup.sql

(3)将备份数据导入从库

注:需要在从库中建立好同名数据库才能将数据导入从库

mysql> create database training;

同理在从库的my.cnf中添加配置:

[mysql]

user= root

password= 123456

导入数据:

cat mysql_master_backup.sql | docker exec -i mysql_3307 /usr/bin/mysql training

(4)开启主从同步

也就是上面2、 3点的步骤了,最好是在锁表前先配置好,只留最后 change master 和 start slave 到这里执行,以减少锁表的时间。

change master 注意修改 master_log_file 和 master_log_pos 的值与 master status 的值一致。

(5)释放主库的锁

mysql> unlock tables;

mysql> set global read_only=0;

mysql> set global super_read_only=0;

mysql> show global variables like "%read_only%";

注:线上环境要注意尽量减少锁表的时间和锁表的范围!

mysql> show full processlist; 可以看到:

733e2721f0eefac8cfb17b18a7b585e5.png

至此读写分离的主从架构就搭建完成了,但不会自动进行主备切换,自动切换需要第三方工具配合,如:

Keepalived 与MySQL互为主从自动切换配置

MHA 实现MySQL主从自动切换 高可用 (Master High Availability)

对于配置文件错误无法启动容器的情况可以先把配置文件复制出来修改好再复制回去:

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH

docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH

docker cp mysql_3307:/etc/mysql/my.cnf ./my.cnf

docker cp ./my.cnf mysql_3307:/etc/mysql/my.cnf

端口开放情况排查:

能否ping通

netstat -apt 端口监听状态

telnet ip port 能否远程连接

ECS 安全规则配置

防火墙(ufw)

iptables (iptables -I INPUT -p tcp --dport 3308 -j ACCEPT)

二、分布式数据库中间件Mycat分库分表简单应用

1. Mycat 安装

Mycat 官网 查找所需版本下载链接

# 下载

wget http://dl.mycat.io/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz Mycat-server-1.6.7.4-release-linux.tar.gz

# 解压至 /etc/,会自动创建 mycat 目录

tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /etc

d8561bf05285e0feb70059bf5fb607df.png

conf目录下有三个主要的配置文件:

server.xml  Mycat系统配置信息,包括账号密码、权限、端口等参数

scheme.xml  Mycat的逻辑库、表、分片规则、DataNode以及DataSource

rule.xml   表拆分规则定义

因为Mycat到目前为止,还不支持caching_sha2_password的加密方式,所以连接节点时mycat.log日志会报错如下:

can"t connect to mysql server ,errmsg:Client does not support authentication protocol requested by server;

ab7f89f0d8bf40c2b4e4f4f294e06ee9.png

只能更改登录user@ip的密码加密方式为较早版本的mysql_native_password:

mysql> select user, host, plugin from mysql.user;

mysql> ALTER USER "root"@"%" IDENTIFIED BY "123456" PASSWORD EXPIRE NEVER;

mysql> ALTER USER "root"@"%" IDENTIFIED WITH mysql_native_password BY "123456";

mysql> FLUSH PRIVILEGES;

mysql> select user, host, plugin from mysql.user;

待续……

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

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

相关文章

五种I/O模型详解

1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不…

存储过程 while is null_4.2 串的存储实现(2)

返回目录:Chilan Yu:《数据结构》目录链接​zhuanlan.zhihu.com4.2.2 堆串字符串包括串名与串值两部分,而串值采用堆串存储方式存储,串名用符号表存储。堆串存储方式:这种存储方法以一组地址连续的存储单元存放串的字符…

高光谱图像pca降维_高光谱图像的数据特性之探讨

图像是获取信息以及探知世界的重要媒介。近年来,传感科技与成像技术实现了跨越式发展,促使图像获取在质与量上均获得了显著提升。在多样化成像手段中,光谱成像技术是成像科技的重要组成部分,是人类借助光这一能量手段探测物质特性…

注册Tomcat服务为系统服务

2019独角兽企业重金招聘Python工程师标准>>> 将解压版的Tomcat服务注册为系统服务之后,就不用每次启动机器之后都要手动去启动"startup.bat",就方便多了,下面就是具体步骤(以我的机器为例,我的To…

【Spring学习笔记-MVC-17】Spring MVC之拦截器

作者:ssslinppp 1. 拦截器简介及应用场景2. 拦截器接口及拦截器适配器3. 运行流程图正常运行中断流程4. 程序实例控制层:ControllerRequestMapping(value "/test")public class TestController {RequestMapping(value "/intercept…

iOS之地理位置及定位系统 -- 入门笔记(用Swift)

前言:关于地理位置及定位系统,在iOS开发中也比较常见,比如美团外面的餐饮店铺的搜索,它首先需要用户当前手机的位置,然后在这个位置附近搜索相关的餐饮店铺的位置,并提供相关的餐饮信息,再比如最…

PHP监測memcache服务端的执行状况

. 代码例如以下,代码为memcache官方代码,引用在此。做一下简单的说明: 1、设置username和password define(ADMIN_USERNAME,admin); // Admin Username define(ADMIN_PASSWORD,123456); // Admin Password 2、配置server及其port&#xff0…

linux grep 匹配空格_17 个案例,5 分钟简单搞定 Linux 正则表达式!

正则表达式是一种字符模式,用于在查找过程中匹配制定的字符。元字符通常在Linux中分为两类:Shell元字符,由Linux Shell进行解析;正则表达式元字符,由vi/grep/sed/awk等文本处理工具进行解析;正则表达式一般…

micropython web ws2812_MicroPython实例之TPYBoard v102炫彩跑马灯WS2812B

一、实验目的了解ws2812b的工作原理学习ws2812b的驱动方法二、实验器材TPYBoard v102 1块ws2812b RGB-Ring-8 1个micro USB数据线 1条杜邦线 若干三、WS2812B的介绍WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。 其外型与一个5050LED灯珠相同, 每个元…

mysql数据库表复用_MySQL 数据库之表操作

一、创建表的完整语法create table 表(字段名1 类型 [(宽度) 约束条件],字段名2 类型 [(宽度) 约束条件],字段名3 类型 [(宽度) 约束条件]);1.类型:使用限制字段必须以什么样的数据类型传值约束条件:约束条件是在类型之…

Android有道词典查询功能

有道词典 任务要求&#xff1a;完成查词等功能 因为需要申请API key&#xff0c;这里直接给出地址供使用&#xff1a;http://fanyi.youdao.com/openapi?pathdata-mode 1、activity_main.xml基本格局&#xff08;不做任何说明&#xff09; 代码如下&#xff1a; 1 <Relative…

从零开始学Axure原型设计(高级篇)

如果你熟悉了Axure的部件库&#xff0c;那么你可以得心应手地画出心目中产品的线框图&#xff1b;如果你会用Axure的母版、动态面板功能&#xff0c;那么你应该能够画出一些简单网站的原型图&#xff1b;但只有你精通了Axure的条件逻辑、变量、函数等高级交互&#xff0c;才能将…

python vector 初始化_从零开始搭建机器学习算法框架(python)--计算框架

介绍今天开始一个新的系列&#xff0c;这个系列的目标是用python在不使用任何第三方库的情况下去实现各类机器学习或者深度学习的算法。之所以会有这种想法是因为每当我想提高编程技巧的时候&#xff0c;我总希望能够做一些简单又有趣的小项目练手。我一直对机器学习算法颇感兴…

windows phone 页面主题设计

达到如图这个效果&#xff1a; 1.保证状态栏背景色与主题栏颜色相同需设置状态栏的透明度&#xff0c;代码如下&#xff1a;shell:SystemTray.IsVisible"True" shell:SystemTray.Opacity"0.01" 2.顶部状态栏高度为25&#xff0c;字的上下要留部分空白3.内容…

JAVA如何才能导出这样的EXCEL?

2019独角兽企业重金招聘Python工程师标准>>> 最近的项目有个需求&#xff0c;需要做个报表&#xff0c;excel如上所示。没有很好的办法&#xff0c;求指教。 转载于:https://my.oschina.net/secret620/blog/611450

Xcode 修改工程名以及注意事项

1、先把整个工程文件夹名改为新的工程名。 2、打开工程&#xff0c;单击&#xff0c;输入新的工程名,会出现&#xff0c;点击确定。 3、回到工程界面&#xff0c;在中选择 Manage Schemes,然后再弹出的对话框&#xff0c;把工程名改为新的名字。 4、最好在工程中&#xff0c;把…

脚本命令配置mysql_MySQL 自动化部署脚本

一、环境说明操作系统&#xff1a;CentOS数据库版本&#xff1a;MySQL 5.7/8.0参数&#xff1a;buffer pool 会根据系统内存指定、默认双一、GTID、SlowLog脚本默认安装路径&#xff1a;/usr/local/mysql脚本默认数据路径&#xff1a;/data/mysql*(根据安装包版本适应 比如 5.7…

第2章 数字之魅——快速寻找满足条件的两个数

快速寻找满足条件的两个数 问题描述 能否快速找出一个数组中的两个数字&#xff0c;让这两个数字之和等于一个给定的数字&#xff0c;为了简化起见&#xff0c;我们假设这个数组中肯定存在这样一组或以上符合要求的解。 分析与解法 【解法一】 代码如下&#xff1a; 1 package …

eigen 列向量转矩阵_快速入门矩阵运算——开源库Eigen

矩阵是数学中一个重要的工具&#xff0c;广泛应用于各种场景下的数值分析&#xff0c;例如&#xff0c;数字信号处理&#xff0c;图像处理等。我们如何在程序中使用矩阵进行运算呢&#xff1f;本文将为大家介绍一个开源的矩阵运算工具——Eigen。Eigen is a C template library…

mysql raid_DBA们应该知道的RAID卡知识_MySQL

bitsCN.com对于数据库这种特殊应用IOphotoshop/ target_blank classinfotextkey>PS往往会成为瓶颈&#xff0c;突破的这个瓶颈的有效方法不多&#xff0c;软件方面主要是读写分离&#xff0c;垂直拆分&#xff0c;分区表技术&#xff0c;cluster。硬件方面主要是raid&#x…