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,一经查实,立即删除!

相关文章

C++11标准库 - array

std::array是原生数组的封装,它存放于栈上且大小固定,性能也与之相同。在原生数组的基础上,它添加了范围检查,以及其它的STL的相应特性,比如复制、交换、迭代器、查询大小。 按照C11的规范,应该抛弃原生数组…

设计模式之单例模式(C++代码实现)

1、单例模式: 单例模式:用来创建独一无二的,只能够有一个实例的对象。 单例模式的结构是设计模式中最简单的,但是想要完全实现一个线程安全的单例模式还是有很多陷阱的。 2、应用场景: 共享数据或者共享访问点&…

在Controller中使用AOP

转:http://usherlight.iteye.com/blog/1306111 在Controller中使用AOP的问题主要在于如何让Controller能够被检测到。 Controller和其他Spring bean的区别在于:Controller是由mvc定义并在web.xml中的dispatcher中定义的。 解决方法: 1、正确定义Controll…

mysql 6.17_2020 6/17 mysql数据的增删改查

一、增删改数据1、增加数据:-- 插入所有字段。一定依次按顺序插入INSERT INTO student VALUES(1,张三,男,20);-- 插入部分字段INSERT INTO student(id,NAME) VALUES(2,李四);2、修改数据:-- 带条件的修改(推荐使用)UPDATE student SET gender男 WHERE id…

五种I/O模型详解

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

回答自己的提问

第一章:概论 问题:看完这章后,了解了一些程序员都知道的名言、推论等;像"程序数据结构算法”、"软件程序软件工程"这些。在1.2.3这节内容上知道软件工程与计算机科学是息息相关的,那么在那么多的计算机…

Tomcat自定义部署

首先,需要把apachetomcat安装目录里面的 bin/ conf/ logs/ webapps/ work/ 都拷贝到自定义WEB应用目录下,比如 /home/app/test.aliyun.com/,这个目录以后就是部署该项目的操作目录,下面用yourdomain来代替。 文件夹部署方式&#…

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

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

iOS UIWebView URL拦截

http://www.cocoachina.com/ios/20150626/12161.html 本文译者:candeladiao,原文:URL filtering for UIWebView on the iPhone说明:译者在做app开发时,因为页面的javascript文件比较大导致加载速度很慢,所以…

nginx的upstream目前支持5种方式的分配

nginx的upstream目前支持5种方式的分配1、轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。2、weight指定轮询几率,weight和访问比率成正比,用于后端服务器性能…

1216: 斐波那契数列

From: 合工宣OJ http://xcacm.hfut.edu.cn/problem.php?id1216 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Fibonacci数列&#xff0c;定义如下&#xff1a; f(1)f(2)1 f(n)f(n-1)f(n-2) n>3 计算第n项Fibonacci数值。 输入 输入第一行为一个整数n&#xff08;1<…

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

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

RequestMapping

转自&#xff1a;http://blog.csdn.net/kobejayandy/article/details/12690041 简介&#xff1a;RequestMappingRequestMapping是一个用来处理请求地址映射的注解&#xff0c;可用于类或方法上。用于类上&#xff0c;表示类中的所有响应请求的方法都是以该地址作为父路径。Requ…

mysql 8.0 yum_CentOS8 安装 MySQL8.0(yum)

1、Mysql 官网下载 RPM 包wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm2、检查是否已安装(强力卸载)for i in $(rpm -qa|grep mysql);do rpm -e $i --nodeps;donerm -rf /var/lib/mysql && rm -rf /etc/my.cnf && rm -rf /usr/…

CASIO 5800P计算器游戏--猜数字游戏

CASIO 5800P 计算器游戏--猜数字游戏原代码我编的计算器小游戏--猜数字游戏 LbI I↙ "xxGUESS NUMBERxx xPROGRAMMER:JCHx ---------------- START>>>>>>>[EXE]"◢ LbI Q↙ "xxxDIFFICULTYxxx[1EASY][2MIDDLE][3HARD]"?→N: N1>G…

注册Tomcat服务为系统服务

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

mysql mtop_mysqlmtop2.2运行出错

ADatabaseErrorOccurredUnabletoconnecttoyourdatabaseserverusingtheprovidedsettings.Filename:core/Loader.phpLineNumber:346mysqlmtop/etc/config.ini配置&#xff1a;###监控机MySQL数据库...A Database Error OccurredUnable to connect to your database server using …

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

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

Angular浅入深出系列 - 写在前面

本系列目录&#xff1a;写在前面基础知识控制器&#xff08;Controller&#xff09;作用域&#xff08;Scope&#xff09;集合&#xff08;Collection&#xff09;模块&#xff08;Module&#xff09;依赖注入&#xff08;Dependency Injection&#xff09;服务&#xff08;Ser…

PHP 错误与异常 笔记与总结(12 )异常

① 异常的概念&#xff1b;异常和错误的区别 PHP 部分借鉴了 C 和 JAVA 中的异常处理机制。PHP 中的异常是指 程序运行和预期不太一致&#xff0c;与错误是两个不同的概念。 ② 异常的语法结构 【例1】 1 <?php2 header(content-type:text/html; charsetutf-8);3 /*4 t…