09-Docker安装Mysql

简介: 本文介绍如何使用Docker安装MySQL 5.7,涵盖单机部署与主从复制配置。包括镜像拉取、容器启动、中文乱码解决、数据卷映射,并详细演示主从复制的搭建步骤及同步测试,确保数据持久化与高可用。

Docker 安装 Mysql


以安装 Mysql 5.7为例:


docker pull mysql:5.7


Mysql 单机


简单版 Mysql 5.7 安装


简单的启动Mysql容器:


# 需要使用 -e 配置环境变量 MYSQL_ROOT_PASSWORD(mysql root用户的密码)
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7


简单版的Mysql会存在以下问题:


  • 中文乱码
  • 没有容器卷映射


启动docker容器后,可以正常的连接、创建数据库,创建表,插入数据。但是插入中文则会报错。


例如:


-- 创建db01数据库
create database db01;
-- 切换到db01;
use db01;
-- 创建表
create table t1(id int, name varchar(20));
-- 插入英文可以正常插入
insert into t1 values(1, 'abc');
-- 插入中文报错
insert into t1 values(2, '张三');


这是因为docker默认的字符集的问题,可以在mysql中使用以下命令查看数据库字符集:


show variables like 'character%';


返回的字符集中,character_set_databasecharacter_set_server等都为latin1字符集,所以会报错。


而且因为启动容器时没有配置容器卷映射,当容器意外被删时,数据无法找回。


实际应用版 Mysql 5.7安装


启动 Mysql 容器,并配置容器卷映射:


docker run -d -p 3306:3306 \
           --privileged=true \
           -v /app/mysql/log:/var/log/mysql \
           -v /app/mysql/data:/var/lib/mysql \
           -v /app/mysql/conf:/etc/mysql/conf.d \
           -e MYSQL_ROOT_PASSWORD=root \
           --name mysql \
           mysql:5.7


/app/mysql/conf下新建 my.cnf,通过容器卷同步给mysql实例,解决中文乱码问题:


[client]
default-character-set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8


重启mysql容器,使得容器重新加载配置文件:


docker restart mysql


此时便解决了中文乱码(中文插入报错)问题。


而且因为启动时将容器做了容器卷映射,将mysql的配置(映射到/app/mysql/conf)、数据(映射到/app/mysql/data)、日志(映射到/app/mysql/log)都映射到了宿主机实际目录,所以即使删除了容器,也不会产生太大影响。只需要再执行一下启动Mysql容器命令,容器卷还按相同位置进行映射,所有的数据便都可以正常恢复。


Mysql 主从复制安装


安装主服务器容器实例(端口号3307):


  1. 启动容器实例
docker run -p 3307:3306 \
           --name mysql-master \
           --privileged=true \
           -v /app/mysql-master/log:/var/log/mysql \
           -v /app/mysql-master/data:/var/lib/mysql \
           -v /app/mysql-master/conf:/etc/mysql \
           -e MYSQL_ROOT_PASSWORD=root \
           -d mysql:5.7


  1. 进入/app/mysql-master/conf,新建my.cnf配置文件:
[mysqld]
## 设置server_id, 同一个局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062


  1. 重启容器实例
docker restart mysql-master


  1. 进入容器实例内
docker exec -it mysql-master /bin/bash


  1. 登录mysql,创建数据同步用户
-- 首先使用 mysql -uroot -p 登录mysql
-- 创建数据同步用户
create user 'slave'@'%' identified by '123456';
-- 授权
grant replication slave, replication client on *.* to 'slave'@'%';
flush privileges;



安装从服务器容器实例(端口号3308):


  1. 启动容器服务:
docker run -p 3308:3306 \
           --name mysql-slave \
           --privileged=true \
           -v /app/mysql-slave/log:/var/log/mysql \
           -v /app/mysql-slave/data:/var/lib/mysql \
           -v /app/mysql-slave/conf:/etc/mysql \
           -e MYSQL_ROOT_PASSWORD=root \
           -d mysql:5.7


  1. 进入/app/mysql-slave/conf目录,创建my.cnf配置文件:
[mysqld]
## 设置server_id, 同一个局域网内需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能,以备slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置只读(具有super权限的用户除外)
read_only=1


  1. 修改完配置需要重启slave容器实例
docker restart mysql-slave



在主数据库中查看主从同步状态:


  1. 进入主数据库容器:
docker exec -it mysql-master /bin/bash


  1. 进入Mysql
mysql -uroot -p


  1. 查看主从同步状态
show master status;

主要查看返回结果的文件名File、当前位置Position


进入从数据库容器,配置主从复制:


  1. 进入从数据库容器:
docker exec -it mysql-slave /bin/bash


  1. 进入数据库
mysql -uroot -p


  1. 配置从数据库所属的主数据库:
-- 格式:
-- change master to master_host='宿主机ip',master_user='主数据库配置的主从复制用户名',master_password='主数据库配置的主从复制用户密码',master_port=宿主机主数据库端口,master_log_file='主数据库主从同步状态的文件名File',master_log_pos=主数据库主从同步状态的Position,master_connect_retry=连接失败重试时间间隔(秒);
change master to master_host='192.168.xxx.xxx',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall-mysql-bin.000001',master_log_pos=769,master_connect_retry=30;


  1. 查看主从同步状态:
# \G 可以将横向的结果集表格转换成纵向展示。
# slave status的字段比较多,纵向展示比友好
show slave status \G;

除了展示刚刚配置的主数据库信息外,主要关注 Slave_IO_RunningSlave_SQL_Running。目前两个值应该都为 No,表示还没有开始。

  1. 开启主从同步:
start slave;


  1. 再次查看主从同步状态,Slave_IO_RunningSlave_SQL_Running都变为Yes


主从复制测试:


  1. 在主数据库上新建库、使用库、新建表、插入数据
create database db01;
use db01;
create table t1 (id int, name varchar(20));
insert into t1 values (1, 'abc');


  1. 在从数据库上使用库、查看记录
show databases;
use db01;
select * from t1;


目录
相关文章
|
机器学习/深度学习 弹性计算 运维
ECS阿里云监控服务
ECS阿里云监控服务
482 3
|
1月前
|
机器学习/深度学习 文字识别 算法
报关单OCR识别-进出口海关报关单识别接口返回参数-文字识别
报关单识别接口基于OCR与深度学习技术,精准提取进出口报关单关键信息,输出结构化数据。支持API调用与私有化部署,适用于智能通关、跨境物流等场景,提升申报效率与准确性。
|
3月前
|
弹性计算 监控 数据可视化
怎么使用阿里云的云监控服务?
阿里云云监控(CloudMonitor)提供免费、实时的云资源与应用性能监控服务,支持ECS、RDS等产品及网站、API监控。具备全方位监控、智能告警、数据可视化等功能,可通过控制台轻松设置监控项与阈值,及时发现异常,保障系统稳定运行。
|
1月前
|
网络协议
02 | 协议:怎么设计可扩展且向后兼容的协议?
本文深入讲解RPC协议的设计原理,从“透明化”出发,剖析协议在应用层的作用。通过对比HTTP协议,揭示RPC为何需设计私有、高效、可扩展的协议,并详解消息边界、序列化方式、协议头结构及扩展机制,强调协议设计中兼容性与性能的平衡,助力构建高性能分布式系统。(238字)
64 5
 02 | 协议:怎么设计可扩展且向后兼容的协议?
|
1月前
|
缓存 网络协议 关系型数据库
01丨核心原理:能否画张图解释下 RPC 的通信流程
RPC(远程过程调用)是一种实现跨服务透明调用的技术,屏蔽网络通信细节,让开发者像调用本地方法一样调用远程服务。本文深入解析RPC的定义、核心原理与通信流程,涵盖序列化、协议设计、动态代理等关键环节,并探讨其在微服务架构中的核心作用,帮助开发者理解如何高效构建分布式系统。
127 4
|
1月前
|
Java Maven 数据安全/隐私保护
06-nexus私仓环境搭建
本文详细介绍Nexus Repository Manager OSS的安装与配置,涵盖JDK环境准备、服务部署、用户创建及启动操作。指导用户搭建Maven和Docker私有仓库,实现jar包与镜像的上传下载,并配置匿名访问与本地客户端信任。支持多种仓库类型,适用于企业级制品管理。
154 0
|
1月前
|
关系型数据库 MySQL Docker
03-Docker下载加速 docker下载加速
本文介绍了两种Docker镜像下载加速方法:一是使用网易数帆、阿里云等镜像仓库直接拉取镜像,如通过`hub.c.163.com/library/mysql`下载MySQL;二是配置阿里云镜像加速器,修改`/etc/docker/daemon.json`文件添加加速地址,重启Docker服务后即可使用官方镜像命令快速拉取。此外,还介绍了如何为Docker配置HTTP/HTTPS代理,提升网络访问效率。
212 0
|
1月前
|
Java Maven 数据安全/隐私保护
Nexus仓库
本文介绍了Nexus Repository Manager的Linux安装与配置,包括JDK环境搭建、OSS版下载、解压启动、仓库管理及Docker部署方式。详细说明了登录、密码重置、仓库创建、Maven/NPM/Docker私服配置与资源上传等操作,并提供常用命令与配置示例,助力高效搭建私有仓库。
170 0
|
1月前
|
缓存 Ubuntu Linux
02-Docker安装 CentOS安装Docker
本文详细介绍在CentOS和Ubuntu系统上安装、配置及卸载Docker的完整步骤,包括配置阿里云镜像加速、离线安装方法、设置开机自启与命令补全,助你快速部署并测试Docker环境。
160 0
|
2月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
18000 9

热门文章

最新文章