mysql多实例和多容器_centos7.5 + docker + mysql5.7 多实例安装

很长时间没有写笔记了,在这里要感谢一下博客园客服帮助恢复账号登陆功能 ~

应单位国产化要求,需要将生成环境切换到 Linux 操作系统,这里笔记一下数据库环境的搭建,方便日后翻阅。PS: 上一篇 MySQL 多实例部署还是在 Windows 环境

为了简化安装环境的繁琐配置过程,决定在 docker 上搭建 MySQL 实例,入门指导:Docker容器详解 ,下边记录一下操作过程中遇到的问题和注意事项。

Docker 容器化数据分为持久化数据和非持久化数据,非持久化数据会随着容器的移除而移除。显然,数据库数据应该被持久化保存,持久化数据需要使用卷映射,本文中将数据库数据及数据库配置均做了持久化处理,配置文件可以在创建数据库实例是多次拷贝使用。

docker的安装及注意事项,请参考 Docker容器详解 ,下边演示多实例配置。

一、拉取镜像

[root@host-10-121-1-84 ~]# docker image pull mysql:5.7

查看镜像:

2da14aba35f8b826e47c5f2893a74c85.png

二、创建容器

使用卷映射创建之前,先了解一下直接创建容器所需要的默认配置文件及数据保存位置, Docker Hub 中有如下解释:

b8e63944c28e8e610e3d938317c72dc2.png

关于配置文件,容器中使用的文件是 /etc/mysql/my.cnf ,而这个文件中又指出了优先使用的配置文件路径  /etc/mysql/conf.d或者 /etc/mysql/mysql.conf.d ,这里需要注意的是,配置文件路径中的文件默认筛选  .cnf 后缀的文件 !!

下边可以先剧透一下 /etc/mysql/my.cnf 文件的内容

c92642232f374fd7e515a821f4ce41dc.png

81b01c5d618c8cf4ccc919eecd00f2ef.png

关于容器中数据存放地址,在红框部分中已做出明确说明了 /var/lib/mysql  。注意,将容器数据挂在到docker服务器中时,确保docker服务器文件系统有足够多的空间(可以通过逻辑卷管理扩展,不在本文讨论范围)

初始话问题说清楚了,开始创建 3307 实例

1、在docker主机上创建 3307 实例的文件夹,用于存放数据及配置文件

[root@host-10-121-1-84 ~]# mkdir /srv/sysdata/mysql/3307

切换到 3307 文件夹下,创建存放配置的文件夹 conf 及存放配置的文件夹 data ,如下:

[root@host-10-121-1-84 3307]# mkdir conf data

在 conf 文件夹下添加 mysql3307.cnf 文件,文件内容如下:

[mysqld]

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

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

datadir=/var/lib/mysql

server-id=1symbolic-links=0max_connections=100connect_timeout=20wait_timeout=6000max_allowed_packet=512M

thread_cache_size=128sort_buffer_size=4M

bulk_insert_buffer_size=16M

tmp_table_size=32M

max_heap_table_size=32M

#

#*MyISAM

#

# This replaces the startup script and checks MyISAM tablesifneeded

# the firsttime they are touched. On error, makecopy and try a repair.

key_buffer_size=128M

table_open_cache=400myisam_sort_buffer_size=512M

concurrent_insert=2read_buffer_size=2M

read_rnd_buffer_size=1M

#

#*InnoDB

#

# InnoDB is enabled by default with a 10MB datafilein /var/lib/mysql/.

# Read the manualfor more InnoDB related options. There are many!default_storage_engine=InnoDB

innodb_buffer_pool_size=256M

innodb_log_buffer_size=128M

innodb_file_per_table=1innodb_open_files=400innodb_io_capacity=400

2、创建容器

[root@host-10-121-1-84 ~]# docker run -d --name mysql3307 -p 3307:3306 -v /srv/sysdata/mysql/3307/conf:/etc/mysql/conf.d -v /srv/sysdata/mysql/3307/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

这里 docker主机下的  /srv/sysdata/mysql/3307/conf 文件夹映射到容器内的 /etc/mysql/conf.d 文件夹,用于覆盖容器默认的配置文件。同理数据文件。MYSQL_ROOT_PASSWORD 是初始化本地root登陆密码。解释一下 -p 3307:3306  将docker服务器端口 3307 映射到 容器内部 3306 端口 ,为什么不是容器内部其他的端口呢? 有人说配置文件中没有指定端口,默认的就是3306端口 ,其实不仅如此,我们可以c查看一下镜像组成:在构建镜像过程中配置暴露的端口是3306

[root@host-10-121-1-84 3307]# docker image inspect mysql:5.7

09d7062ed6921a5909688302ce260b6f.png

3、查看运行状态

[root@host-10-121-1-84 3307]# docker ps

77555000783f9e069548c925ece1413b.png

4、进入mysql 容器,登陆并添加用户

[root@host-10-121-1-84 3307]# docker exec -it mysql3307 /bin/bash

root@7f87e912f128:/# mysql -uroot -p

Enter password:

mysql> grant all privileges on *.* to 'root'@'%' identified by 'your password';

mysql> flush privileges;

还记得上面写到默认使用的配置文件么,退出MySQL实例登陆,进入mysql 容器中,验证上边的内容吧

root@7f87e912f128:/# cat /etc/mysql/my.cnf

5、退出mysql 容器,设置 docker 主机防火墙,对外暴露 3307 端口 (ctrl + D 退出)

[root@host-10-121-1-84 3307]# firewall-cmd --zone=public --add-port=3307/tcp --permanent //添加暴露端口

[root@host-10-121-1-84 3307]# firewall-cmd --zone=public --reload //重新加载防火墙

[root@host-10-121-1-84 3307]# firewall-cmd --zone=public --list-ports //查看端口是否暴露成功

至此,已经完成3307实例的部署工作,恭喜 ~

多实例安装逻辑思维如图,其他端口的实例均与上述实例配置过程一致,均是有docker服务器端口映射到 mysql 容器的 3306 端口

0480c9be31ea196694edf4b797a0feb5.png

(完)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过以下步骤在 CentOS/RHEL 系统上使用 yum 安装 MySQL 5.7 多实例: 1. 首先,确保您的系统已经安装MySQL Community Repository。如果没有安装,请使用以下命令下载并安装: ``` wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm ``` 2. 安装 MySQL 5.7 的服务器软件包,使用以下命令: ``` sudo yum install mysql-community-server ``` 3. 安装完成后,使用以下命令启动 MySQL 服务并设置开机启动: ``` sudo systemctl start mysqld sudo systemctl enable mysqld ``` 4. 确保 MySQL 服务正在运行: ``` sudo systemctl status mysqld ``` 5. 接下来,我们需要创建多实例所需的配置文件和数据目录。请复制默认配置文件并重命名为新实例的配置文件名。例如,我们创建一个名为 `myinstance1.cnf` 的配置文件: ``` sudo cp /etc/my.cnf /etc/myinstance1.cnf ``` 6. 打开新配置文件并修改相关配置,包括端口号、数据目录、日志文件等。确保每个实例具有唯一的端口号和数据目录。例如,在 `myinstance1.cnf` 中,您可以将端口号更改为 3307,并设置不同的数据目录: ``` sudo nano /etc/myinstance1.cnf [mysqld] ... port = 3307 datadir = /var/lib/mysql-instance1 ... ``` 7. 创建新实例的数据目录,并确保 MySQL 用户具有相应的权限: ``` sudo mkdir /var/lib/mysql-instance1 sudo chown mysql:mysql /var/lib/mysql-instance1 ``` 8. 初始化新实例的数据目录: ``` sudo mysqld --initialize --user=mysql --datadir=/var/lib/mysql-instance1 ``` 9. 启动新实例MySQL 服务: ``` sudo systemctl start mysqld@instance1 ``` 10. 确保新实例MySQL 服务正在运行: ``` sudo systemctl status mysqld@instance1 ``` 11. 您可以按照相同的步骤创建其他多实例,只需重复第 5 至第 10 步,将配置文件和数据目录命名为不同的实例名称即可。 现在,您已经成功安装和配置了 MySQL 5.7 的多实例。您可以通过不同的端口号连接到每个实例,并使用独立的数据目录管理和操作各自的数据库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值