Linux上使用Docker部署MYSQL并使用Native连接

第一步下载mysql镜像(不同的mysql下载连接地址

docker pull mysql:8.0.18

第二步启动mysql镜像

 docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

参数含义:
docker run -itd --name mysql : 为容器指定一个名称

-p 3306:3306 :
映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务

-e MYSQL_ROOT_PASSWORD=123456 mysql: 设置环境变量;

第三步进入mysql容器,并登陆mysql

docker exec -it mysql-test  bash

mysql -uroot -p

参数含义:docker exec
-it …bash:上面说到在加上-it 会等容器内的操作执行完毕,而bash 是打开容器内的一个终端近程,又因为it的等待 所以就会一直以终端连接的方式停留在容器内部
docker参数规范
第四步开启远程访问权限

命令:use mysql;

命令:select host,user from user;

命令:ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;

命令:flush privileges;

如果native连接失败的话,需要去看下自己的实例中的安全组的端口有没有开放
我自己使用的是阿里云的esc服务器,没有连接上是因为没配置安全组,选择自己对应的点击配置即可
在这里插入图片描述
可以参考我篇文章

使用Docker部署Oracle并使用Native链接

<think>嗯,用户想了解如何用Docker部署MySQL配置主从复制。我得先理清楚步骤,确保每个部分都正确。首先,Docker部署MySQL应该不难,但主从配置可能需要更多的细节。 首先,我需要确认用户是否已经安装了Docker。不过,可能有些用户不熟悉,所以最好先提一下安装Docker的前提条件。比如在Linux上安装Docker的步骤,或者给个参考链接。不过用户的问题主要是在部署和配置上,可能不需要详细讲安装,但可以简单带过。 接下来是主库的部署。主库需要生成一个容器,指定端口、root密码、数据卷和网络。这里要注意MySQL的配置文件,可能需要自定义的my.cnf,比如设置server-id和log-bin。用户可能需要挂载配置文件到容器里,所以需要给出具体的命令和配置示例。 然后是进入主库容器,创建复制用户授权。这部分需要执行MySQL命令,比如CREATE USER和GRANT REPLICATION SLAVE权限。同时,需要获取主库的binlog状态,使用SHOW MASTER STATUS,这会得到File和Position,从库需要这些信息来连接。 接下来是从库的部署。同样需要指定不同的端口、server-id,可能不需要启用log-bin,但最好还是配置一下。然后进入从库,配置主库的信息,使用CHANGE MASTER TO命令,设置主库的host、port、user、password、log file和position。最后启动从库的复制进程,检查状态。 测试部分也很重要,需要验证主从是否同步。在主库创建测试数据库和表,插入数据,然后在从库查询,确认数据是否一致。如果有问题,可能需要检查日志,比如从库的SHOW SLAVE STATUS\G命令,查看错误信息。 可能需要注意的地方包括网络配置,主从容器是否在同一个Docker网络下,能否互相访问。另外,防火墙设置可能会影响连接,需要确保端口开放。数据卷的持久化存储也是关键,避免容器重启后数据丢失。 用户可能会遇到的问题比如主从连接失败,可能是密码错误、权限不足,或者网络不通。还有server-id必须唯一,否则主从无法正常工作。此外,binlog的配置是否正确,从库的MASTER_LOG_FILE和MASTER_LOG_POS是否匹配主库的状态。 需要提醒用户在实际生产环境中,可能需要更复杂的安全配置,比如SSL加密复制,或者使用Docker Compose来管理多个容器。另外,备份和监控也是重要的方面,但可能超出了当前问题的范围。 总之,步骤需要分主库部署、从库部署、配置复制、验证测试四个部分,每个步骤都要给出具体的命令和配置示例,指出常见问题和解决方法。确保用户能够一步步操作,避免遗漏关键细节。</think>### Docker部署MySQL配置主从复制详细步骤 --- #### **一、准备工作** 1. 安装Docker环境(已安装可跳过) ```bash curl -fsSL https://get.docker.com | bash -s docker ``` 2. 创建本地数据存储目录(避免容器删除后数据丢失) ```bash mkdir -p /docker/mysql/master/data /docker/mysql/slave/data ``` --- #### **二、部署主库(Master)** 1. **启动主库容器** ```bash docker run -d \ --name mysql-master \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=master_root_pwd \ -v /docker/mysql/master/data:/var/lib/mysql \ -v /docker/mysql/master/conf:/etc/mysql/conf.d \ --network mysql-net \ mysql:8.0 \ --server-id=1 \ --log-bin=mysql-bin \ --binlog-do-db=test_db ``` > 📌 参数说明: > - `--server-id=1`:唯一标识主库 > - `--log-bin=mysql-bin`:启用二进制日志 > - `--binlog-do-db=test_db`:指定同步的数据库 2. **进入主库配置** ```bash docker exec -it mysql-master mysql -uroot -pmaster_root_pwd ``` ```sql -- 创建同步用户 CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_pwd'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; -- 查看主库状态(记录File和Position) SHOW MASTER STATUS; ``` ```plaintext +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 835 | test_db | | +------------------+----------+--------------+------------------+ ``` --- #### **三、部署从库(Slave)** 1. **启动从库容器** ```bash docker run -d \ --name mysql-slave \ -p 3307:3306 \ -e MYSQL_ROOT_PASSWORD=slave_root_pwd \ -v /docker/mysql/slave/data:/var/lib/mysql \ -v /docker/mysql/slave/conf:/etc/mysql/conf.d \ --network mysql-net \ mysql:8.0 \ --server-id=2 ``` 2. **进入从库配置** ```bash docker exec -it mysql-slave mysql -uroot -pslave_root_pwd ``` ```sql -- 设置主库连接信息 CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='repl', MASTER_PASSWORD='repl_pwd', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=835; -- 启动复制 START SLAVE; -- 查看从库状态 SHOW SLAVE STATUS\G ``` > ✅ 验证关键字段: > - `Slave_IO_Running: Yes` > - `Slave_SQL_Running: Yes` --- #### **四、测试主从同步** 1. **在主库创建测试数据** ```sql CREATE DATABASE test_db; USE test_db; CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(20)); INSERT INTO users VALUES (1, 'Alice'); ``` 2. **在从库验证数据** ```sql USE test_db; SELECT * FROM users; ``` ```plaintext +----+-------+ | id | name | +----+-------+ | 1 | Alice | +----+-------+ ``` --- #### **五、常见问题排查** 1. **主从连接失败** - 检查`docker network`是否互通 - 验证`MASTER_HOST`是否使用容器名称/IP - 确认防火墙开放3306端口 2. **数据不同步** ```sql -- 在从库执行 STOP SLAVE; RESET SLAVE; SHOW SLAVE STATUS\G -- 重新获取主库File和Position ``` --- #### **六、扩展建议** 1. 使用`docker-compose.yml`统一管理容器 2. 配置GTID模式提升主从稳定性 3. 添加健康检查`healthcheck`配置 4. 对敏感数据加密(如`mysql_native_password`插件) > 完整配置示例见:[GitHub Gist链接]()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值