联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话:18888888888 QQ:88888

mysql在docker的部署,mysql简单部署和集群部署

mysql在docker的部署,mysql简单部署和集群部署

mysql在docker的部署

1.创建Dockerfile

vi Dockerfile
#####插入数据
FROM mysql:8.4
# 设置环境变量,配置 MySQL root 用户密码
ENV MYSQL_ROOT_PASSWORD=root
# 设置时区
ENV TZ=Asia/Shanghai
# 复制本地的 SQL 初始化脚本到容器中
# 例如你可以将 SQL 文件放在 ./init-scripts 目录下,这样容器启动时会自动执行这些脚本,你可以加-01,-02前缀按顺序执行
COPY ./init-scripts /docker-entrypoint-initdb.d/
# 暴露 MySQL 默认端口
EXPOSE 3306
# 启动 MySQL 服务
CMD ["mysqld"]

2.创建初始化脚本目录,放入初始化脚本,可加01-,02-前缀按顺序执行

mkdir init-scripts
cd init-scripts
#放入初始化sql文件,如果没有用下面的命令创建
vi 01-init.sql

#####插入数据
CREATE DATABASE IF NOT EXISTS mydatabase;
USE mydatabase;

CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(100),
    password VARCHAR(100)
);

INSERT INTO users (username, password) VALUES ('admin', 'password');

3.创建存储目录,设置权限

mkdir -p /docker/mysql/data
chmod -R 777 /docker/mysql

4.构建mysql镜像(必须所在目录包含init-scripts目录(目录包含初始化sql文件)和Dockerfile文件)

docker build -t mysql:8.4 .

5.运行镜像

docker run -d --name mysql \ 
-p 3306:3306 \ 
-v /docker/mysql/data:/var/lib/mysql \ 
mysql:8.4
#-v /docker/mysql/data:/var/lib/mysql  表示挂载mysql的存储目录

6.开放端口

#1.查看是否开启防火墙
systemctl status firewalld
#2.查看防火墙开放的端口
sudo firewall-cmd --list-ports
#3.开放端口
sudo firewall-cmd --add-port=3306/tcp --permanent
#4.重新加载
sudo firewall-cmd --reload
#5.查看端口是否开放
sudo firewall-cmd --list-ports

mysql集群的搭建

1.搭建基础的mysql环境

**下载网址: https://dev.mysql.com/downloads/mysql/** */

1.1.下载mysql的安装包

安装包如下:mysql-8.0.43-1.el9.x86_64.rpm-bundle.tar

图片#B #S #R #60% #auto

1.2.mysql安装与配置

1.2.1.将压缩包放到/root/mysql下

cd /root
mkdir mysql
cd mysql
#查看并卸载安装包mariadbm,以防影响mysql
rpm -qa |grep mariadb
 
rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps #名字为上面查询的

安装包在我的123网盘中!!!!!

1.2.2.解压mysql包

tar -xvf mysql-8.0.43-1.el8.x86_64.rpm-bundle.tar

## 后面安装的时候出现依赖缺失,就先安装缺失的依赖(rpm -ivh 缺失的依赖 --nodeps --force)
rpm -ivh mysql-community-common-8.0.43-1.el8.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-client-plugins-8.0.43-1.el8.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-libs-8.0.43-1.el8.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-client-8.0.43-1.el8.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-icu-data-files-8.0.43-1.el8.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-server-8.0.43-1.el8.x86_64.rpm --nodeps --force

可能缺失依赖的情况

图片#B #S #R #60% #auto

1.2.3.初始化配置进行登录

#初始化 MySQL 数据库。
mysqld --initialize 
 
#将 MySQL 数据目录的所有者设置为 mysql 用户和组。
chown mysql:mysql /var/lib/mysql -R
 
#启动 MySQL 服务。
systemctl start mysqld.service
 
#设置 MySQL 服务开机自启动。
systemctl enable mysqld
 
#从 MySQL 日志中查找自动生成的 root 用户密码。
cat /var/log/mysqld.log | grep password
 
mysql -u root -p

1.2.4.更改配置

#更改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
 
#远程访问授权
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
 
#添加用户权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
 
#权限刷新
FLUSH PRIVILEGES;

1.2.5.使用客户端进行远程连接

前置:如果连接不到开放3306端口

#public区域中永久添加 TCP 端口 3306 的防火墙规则
firewall-cmd --zone=public --add-port=3306/tcp --permanent
 
#重新加载防火墙配置,使更改生效。
firewall-cmd --reload

2.搭建mysql集群

先搭建好mysql基础环境,要几个就搭建几个

以一主两从为例

2.1.配置主节点

在主节点(192.168.56.151)的 /etc/my.cnf 增加如下配置

vim /etc/my.cnf
#指定要复制的数据库为 "test",可配置多个
binlog-do-db=test
binlog-do-db=test2
#忽略复制 "mysql" 数据库,可配置多个
binlog-ignore-db=mysql
#设置二进制日志文件名前缀为 "mysql-bin"
log-bin=mysql-bin
#设置主MySQL 服务器的 ID
#一般为ip地址的后三位
server-id=151

2.2.配置从节点

在从节点(192.168.56.152)的 /etc/my.cnf 添加如下配置

vim /etc/my.cnf
server-id=131
#复制指定的数据库
replicate-do-db=test
replicate-do-db=test2
replicate-ignore-db=mysql

2.3.主节点上创建公共用户并授权

回到主节点上操作

mysql -uroot -p123456
#创建用户,所有地址均可访问
CREATE USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
#授权,可以操作所有数据库
GRANT REPLICATION SLAVE ON *.* TO 'admin'@'%';
flush privileges;

查看主服务器状态

show master status;

记录一下FilePosition

图片#B #S #R #60% #auto

2.4.从节点的master配置

从节点上对master的配置,根据上一步的结果

mysql -uroot -pSa123456

change master to
    MASTER_HOST='192.168.56.151',
    MASTER_USER='admin',
    MASTER_PASSWORD='123456',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=829;

注意:

MASTER_HOST:为主节点地址,
MASTER_USER:为上面主节点创建信息同步的test用户,
MASTER_PASSWORD:密码,
MASTER_LOG_FILE:主节点日志文件名字,
MASTER_LOG_POS=:主节点的position

开启同步并显示状态

start slave;
show slave status\G

如果结果如下则显示成功

图片#B #S #R #60% #auto

2.5.同步测试

在主节点上创建一个数据库,看看从数据库是否同步了

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册