基于centos封装mysql8的 PXC集群的docker镜像
时间: 2024-04-29 15:23:27 浏览: 135
docker的mysql镜像
以下是基于CentOS封装MySQL8的PXC集群的Docker镜像的步骤:
1. 准备工作
安装Docker和Docker Compose,确保系统已经安装了CentOS 7或更高版本。
2. 创建Dockerfile
在本地创建一个新的文件夹,并在其中创建一个Dockerfile文件。将以下内容复制到Dockerfile文件中:
```
FROM centos:latest
RUN yum update -y && \
yum install -y epel-release && \
yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm && \
yum install -y Percona-XtraDB-Cluster-57 && \
yum install -y which && \
yum clean all
ENV MYSQL_ROOT_PASSWORD=password
ENV MYSQL_USER=mysql
ENV MYSQL_PASSWORD=password
COPY my.cnf /etc/my.cnf
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 3306 4444 4567 4568
CMD ["mysqld"]
```
3. 编写docker-entrypoint.sh
在本地文件夹中创建一个名为docker-entrypoint.sh的新文件,并将以下内容复制到该文件中:
```
#!/bin/bash
set -e
# Start MySQL server
mysqld --user=mysql --wsrep-new-cluster &
# Wait for the MySQL server to start
mysqladmin --user=root --password=$MYSQL_ROOT_PASSWORD ping --silent
# Create the PXC cluster
mysql --user=root --password=$MYSQL_ROOT_PASSWORD -e "CREATE USER '$MYSQL_USER'@'%';"
mysql --user=root --password=$MYSQL_ROOT_PASSWORD -e "GRANT ALL PRIVILEGES ON *.* TO '$MYSQL_USER'@'%' WITH GRANT OPTION;"
mysql --user=root --password=$MYSQL_ROOT_PASSWORD -e "SET GLOBAL wsrep_cluster_address='gcomm://';"
mysql --user=root --password=$MYSQL_ROOT_PASSWORD -e "SET GLOBAL wsrep_node_address='$(hostname -i)';"
mysql --user=root --password=$MYSQL_ROOT_PASSWORD -e "SET GLOBAL wsrep_node_name='$(hostname)';"
mysql --user=root --password=$MYSQL_ROOT_PASSWORD -e "SET GLOBAL wsrep_provider_options='pc.bootstrap=1';"
mysql --user=root --password=$MYSQL_ROOT_PASSWORD -e "SET GLOBAL wsrep_sst_method='xtrabackup-v2';"
mysql --user=root --password=$MYSQL_ROOT_PASSWORD -e "SET GLOBAL wsrep_cluster_name='PXC';"
# Shutdown the MySQL server
mysqladmin --user=root --password=$MYSQL_ROOT_PASSWORD shutdown
# Start MySQL server with PXC
exec mysqld --user=mysql
```
4. 创建my.cnf文件
在本地文件夹中创建一个名为my.cnf的新文件,并将以下内容复制到该文件中:
```
[mysqld]
server-id=1
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
wsrep_on=ON
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=PXC
wsrep_cluster_address=gcomm://
wsrep_node_name=node1
wsrep_node_address=192.168.0.1
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:s3cret
```
替换上述内容中的wsrep_cluster_address、wsrep_node_name和wsrep_node_address为适当的值。
5. 创建docker-compose.yml文件
在本地文件夹中创建一个名为docker-compose.yml的新文件,并将以下内容复制到该文件中:
```
version: '3.7'
services:
db:
build: .
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_USER: mysql
MYSQL_PASSWORD: password
ports:
- "3306:3306"
- "4444:4444"
- "4567:4567"
- "4568:4568"
```
6. 构建和运行Docker镜像
在终端中转到文件夹,并运行以下命令来构建Docker镜像:
```
docker build -t mysql-pxc .
```
然后,运行以下命令来启动Docker容器:
```
docker-compose up -d
```
这将启动MySQL8的PXC集群,并将其映射到主机的3306端口。您可以使用MySQL客户端连接到它并开始使用它。
阅读全文