17. Docker应用-Docker部署MySQL

单机

基础配置

  • 创建目录
mkdir -p /data/mysql/{data,logs,conf}
  • 编辑配置文件
cat > /data/mysql/conf/my.cnf << EOF
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld]
port = 3306
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
datadir = /var/lib/mysql
pid-file = /var/run/mysqld/mysqld.pid
max_connections = 100
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
default-storage-engine = INNODB

[mysqld_safe]
log-error = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid
EOF

下载镜像

docker pull mysql:5.7.31

部署服务

docker run -d --name mysql-5.7 \
-p 3306:3306 \
--restart=always \
-e MYSQL_ROOT_PASSWORD="Whaty@123" \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/logs:/var/log/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
mysql:5.7.31

验证服务

image.png

主从

基础配置

  • 创建目录
mkdir -p /data/mysql/{master,slaver}/{data,logs,conf}
  • 编辑配置文件-master
cat > /data/mysql/master/conf/my.cnf << EOF
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld]
port = 3306
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
pid-file = /var/run/mysqld/mysqld.pid
max_connections = 100
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
default-storage-engine = INNODB

#主从复制
server_id = 01
log-bin = mysql-master-bin
binlog-ignore-db = information_schema
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog_cache_size = 1M
binlog_format = mixed
expire_logs_days = 180
slave_skip_errors = 1062

[mysqld_safe]
log-error = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid
EOF
  • 编辑配置文件-slaver
cat > /data/mysql/slaver/conf/my.cnf << EOF
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld]
port = 3306
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
pid-file = /var/run/mysqld/mysqld.pid
max_connections = 100
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
default-storage-engine = INNODB

#主从复制
server_id = 02
log-bin = mysql-slaver-bin
binlog-ignore-db = information_schema
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog_cache_size = 1M
binlog_format = mixed
expire_logs_days = 180
slave_skip_errors = 1062
relay_log = mysql-relay-bin
log_slave_updates = 1
read_only = 1

[mysqld_safe]
log-error = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid
EOF

下载镜像

docker pull mysql:5.7.31

部署服务

  • 部署master
docker run -d --name mysql-master \
-p 3316:3306 \
--restart=always \
-e MYSQL_ROOT_PASSWORD="Whaty@123" \
-v /data/mysql/master/data:/var/lib/mysql \
-v /data/mysql/master/logs:/var/log/mysql \
-v /data/mysql/master/conf:/etc/mysql/conf.d \
mysql:5.7.31
  • 部署slaver
docker run -d --name mysql-slaver \
-p 3326:3306 \
--restart=always \
-e MYSQL_ROOT_PASSWORD="Whaty@123" \
-v /data/mysql/slaver/data:/var/lib/mysql \
-v /data/mysql/slaver/logs:/var/log/mysql \
-v /data/mysql/slaver/conf:/etc/mysql/conf.d \
mysql:5.7.31
  • 配置主从-master配置
#创建主从用户
docker exec -it mysql-master \
mysql -uroot -p'Whaty@123' \
-e "create user 'slave'@'%' identified by 'whaty1212';"

#为主从用户授权
docker exec -it mysql-master \
mysql -uroot -p'Whaty@123' \
-e "grant replication slave,replication client on *.* to 'slave'@'%';"

#让配置生效
docker exec -it mysql-master \
mysql -uroot -p'Whaty@123' \
-e "FLUSH PRIVILEGES;"

#检查主库配置
docker exec -it mysql-master \
mysql -uroot -p'Whaty@123' \
-e "show master status;"
  • 配置主从-slaver配置
#配置主从复制
docker exec -it mysql-slaver \
mysql -uroot -p'Whaty@123' \
-e "change master to master_host='192.168.108.128', master_user='slave', master_password='whaty1212', master_port=3316, master_log_file='mysql-master-bin.000004', master_log_pos=154, master_connect_retry=30;"

#开启主从同步
docker exec -it mysql-slaver \
mysql -uroot -p'Whaty@123' \
-e "start slave;"

#查看主从状态
docker exec -it mysql-slaver \
mysql -uroot -p'Whaty@123' \
-e "show slave status \G;"

验证服务

  • 创建数据库
docker exec -it mysql-master \
mysql -uroot -p'Whaty@123' \
-e "create database test;"
  • 查看同步
docker exec -it mysql-slaver \
mysql -uroot -p'Whaty@123' \
-e "show databases;"

集群

  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是部署 Canal 和 RabbitMQ 的 Docker-Compose 文件: ```yaml version: '3' services: mysql: image: mysql:8.0.30 restart: always environment: MYSQL_ROOT_PASSWORD: <your_password> volumes: - ./mysql/conf:/etc/mysql - ./mysql/data:/var/lib/mysql ports: - "3306:3306" command: --default-authentication-plugin=mysql_native_password canal: image: canal/canal-server:1.1.5 restart: always environment: - canal.instance.mysql.slaveId=1234 - canal.instance.master.address=<mysql_host>:3306 - canal.instance.dbUsername=root - canal.instance.dbPassword=<your_password> - canal.instance.connectionCharset=UTF-8 - canal.instance.filter.regex=.*\\..* - canal.instance.tsdb.enable=true - canal.instance.gtidon=false - canal.instance.dump.filter=DruidDataSource ports: - "11111:11111" rabbitmq: image: rabbitmq:3.8-management-alpine restart: always environment: RABBITMQ_DEFAULT_USER: <your_username> RABBITMQ_DEFAULT_PASS: <your_password> ports: - "5672:5672" - "15672:15672" ``` 这里需要替换 `<your_password>`、`<mysql_host>`、`<your_username>` 和 `<your_password>` 为自己的 MySQL root 密码、MySQL 主机地址、RabbitMQ 用户名和密码。 接下来,你需要在 MySQL 中创建一个用户并授予相应权限,以便 Canal 可以访问并同步数据: ```sql CREATE USER 'canal'@'%' IDENTIFIED BY '<your_password>'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; FLUSH PRIVILEGES; ``` 最后,修改 Canal 配置文件,将数据同步到 RabbitMQ: ```yaml name: example rabbitmq: enabled: true host: localhost:5672 virtualHost: / username: <your_username> password: <your_password> exchange: canal-exchange exchangeType: fanout queue: canal-queue routingKey: canal-routing-key ``` 这里需要替换 `<your_username>` 和 `<your_password>` 为自己的 RabbitMQ 用户名和密码。 现在,你可以使用以下命令启动所有服务: ``` docker-compose up -d ``` Canal 将会自动同步 MySQL 数据到 RabbitMQ 中。你可以通过 RabbitMQ 管理界面查看同步的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值