Portainer是一款非常好用的docker容器管理平台,部署也很easy。
# 创建portainer数据卷 docker volume create portainer_data # 拉取镜像启动portainer docker run -d -p 8000:8000 -p 9443:9443 \ --name portainer --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/portainer/portainer-ce:2.27.1
部署好之后访问地址是 https://宿主机ip:9443
下面介绍以下用portaler部署mysql主从
采用stack也就是docker-compose的方式部署
选用Web editer的方式输入docker-compose.yaml的内容
version: '3' services:mysql-master:image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0.37container_name: mysql-masterenvironment:MYSQL_ROOT_PASSWORD: 123456volumes:- /data/mysql-master-slave/master:/var/lib/mysql- /data/mysql-master-slave/master.cnf:/etc/my.cnfports:- "3306:3306"restart: alwaysmysql-slave:image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0.37container_name: mysql-slaveenvironment:MYSQL_ROOT_PASSWORD: 123456volumes:- /data/mysql-master-slave/slave:/var/lib/mysql- /data/mysql-master-slave/slave.cnf:/etc/my.cnfports:- "3307:3306"restart: alwaysdepends_on:- mysql-master
部署好之后进入master命令行
# 进入mysql执行以下命令 mysql -uroot -p'123456' # 创建同步账号,并赋权 CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_p@ssw0rd'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; # 查看binlog日志名称和位置 SHOW MASTER STATUS;
记录好以上内容之后进入slave命令行
# 登录MySQL mysql -uroot -p'123456' # 配置从节点信息 CHANGE MASTER TO MASTER_HOST='mysql-master',MASTER_USER='repl',MASTER_PASSWORD='repl_p@ssw0rd',MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=157; # 启动复制 START SLAVE; # 查看同步状态 SHOW SLAVE STATUS\G
确保Slave_IO_Running
和 Slave_SQL_Running
都为 Yes,说明同步状态是ok的。
错误处理:
我用的mysql8的镜像做的同步,一开始同步状态是有问题的。
MySQL 8.0 默认使用 caching_sha2_password
认证插件,此插件要求使用安全连接(如 SSL/TLS)进行认证。若从节点未配置安全连接,就会出现认证错误。
所以我修改了主库repl账号登录的认证插件
ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'repl_p@ssw0rd'; FLUSH PRIVILEGES;
这样从库就可以顺利连接上了。