MySQL 安装与主从配置
小维AI总结
HunYuan-Turbos-Latest
思考中···
MYSQL安装
安装 MySQL 5.7
1 | docker run -id --name mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.17 |
3307:3306:映射容器服务 docker 的 3306 端口到宿主机(linux 系统)的 3307 端口,外部主机可以直接通过 宿主机ip:3307 访问到 MySQL 的服务- 把云服务器的防火墙 3307 端口打开
查看 MySQL 版本
1 | docker ps -a |
安装 MySQL 8.0
1 | docker run -id --name mysql8 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql |
遇到1251 错误
报 1251 错误原因:mysql8 之前的版本中加密规则是 mysql_native_password
而在 mysql8 之后,加密规则是 caching_sha2_password
先查看正在运行的容器 id,接着进入这个查看的容器(不进入会发现 mysql 找不到):
1 | (1) 查看 |
设置 MySQL 最大连接数
方法 1(重启失效)
1 | docker exec -it mysql-master bash |
方法 2
在 /nwa/mysql5.7/master/mysql 下 mysql.cnf 末尾添加(效果好像不行):
1 | [mysqld] |
去 Navicat 查看:
1 | show VARIABLES like 'max_conn'; |
Navicat 远程连接服务器失败
1 | systemctl stop firewalld |
输入授权语句:
1 | GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; |
MySQL 主从配置
第一步:安装主从数据库
1 | 主数据库 |
第二步:Navicat 连接主数据库并授权
打开 Navicat 连接上面 2 个,再打开主的数据库,执行:
1 | CREATE user nwa@'%' IDENTIFIED by '123456'; -- 创建用户,% 表示任何人都有权限访问 |
第三步:修改主数据库配置
复制配置文件到外面修改,修改完再复制回去:
1 | docker cp mysql-master:/etc/mysql /nwa/mysql5.7/master/ |
修改 /nwa/mysql5.7/master/mysql/mysql.conf.d/ 里 cnf 结尾的文件,配置如下(重点最后 2 行):
1 | [mysqld] |
修改完成后复制回去:
1 | docker cp /nwa/mysql5.7/master/mysql/mysql.conf.d/mysqld.cnf mysql-master:/etc/mysql/mysql.conf.d/ |
验证修改是否生效:
1 | docker exec -it mysql-master bash |
第四步:修改从数据库配置
同理设置从数据库,先复制,再修改,再复制:
1 | docker cp mysql-slave:/etc/mysql /nwa/mysql5.7/slave/ |
修改配置文件(server-id 改为 101):
1 | server-id = 101 |
复制到容器里:
1 | docker cp /nwa/mysql5.7/slave/mysql/mysql.conf.d/mysqld.cnf mysql-slave:/etc/mysql/mysql.conf.d/ |
第五步:重启数据库并设置开机自启
1 | docker restart mysql-master |
第六步:配置主从同步
以上 docker 里面主从设置完毕,再打开 Navicat 设置从数据库:
1 | STOP SLAVE; |
注意:这个宿主机 ip 看着点。
IO running 和 SQL running 必须 2 个都是 Yes。
接下来主数据库创建表,从也会同步了。
常见问题
数据要用 sql 语句去删,别直接删除行,不然数据就不能同步了!
如果状态里 Slave_SQL_Running 是 no,则在 Navicat 从数据库查询:
1 | stop slave; |
修改密码
1 | docker exec -it mysql bash |
1 | set password for root@localhost = password('123456'); -- 这是只改本地,远程选下面 |
评论







