当前位置:网站首页>docke安装mysql以及主从搭建(并且指定数据生成路径)
docke安装mysql以及主从搭建(并且指定数据生成路径)
2022-08-09 14:50:00 【Koma-forever】
一、mysql的安装
1、下载
docker pull mysql:8.0
2、提前创建好文件配置,以及数据卷的文件路径
mkdir -p /url/local/docker/mysql/log
mkdir -p /url/local/docker/mysql/data
mkdir -p /url/local/docker/mysql/conf
mkdir -p /url/local/docker/mysql/mysql-files
3、然后进入/url/local/docker/mysql/conf编辑my.conf文件
vim /url/local/docker/mysql/conf/my.conf
[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8mb4
[mysqld]
#允许最大连接数
max_connections=200
#服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
4、启动设置挂载目录
docker run \
--name mysql \
-d \
-p 3306:3306 \
--restart unless-stopped \
-v /url/local/docker/mysql/log:/var/log/mysql \
-v /url/local/docker/mysql/data:/var/lib/mysql \
-v /url/local/docker/mysql/conf:/etc/mysql \
-v /url/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123456 \
--privileged=true \
mysql:8.0
说明:
1、-v:指定容器数据卷的位置,mysql安装完成后,在容器里面和容器外面挂载的数据同步执行,并且如果mysql容器被删除了,挂载到服务器上保存的数据也不会被删除。
2、如果直接启动命令,然后在执行文件的编辑也是可以的,需要编辑好文建好后,修改启动容器的脚本,然后执行docker restart mysql即可
可能出现的问题
#1、无法连接(不允许远程连接)
docker exec -it mysql /bin/bash
mysql -u root -p
use mysql
# 更新root - localhost 为 root - %
update user set host = '%' where user = 'root' and host='localhost';
# 设置允许远程用户访问
GRANT ALL ON *.* TO 'root'@'%';
flush privileges;# 刷新权限
#更新用户加密方式,mysql8默认的加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
- 如果访问连接不到数据库则可能是端口没开放(购买的服务器的话则需要设置出栈入栈)
firewall-cmd --zone=public --add-port=3306/tcp --permanent && firewall-cmd --reload
二、mysql主从安装
mysql主服务
1、编辑配置文件
mkdir -p /url/local/docker/mysql_master/mysql/log
mkdir -p /url/local/docker/mysql_master/mysql/data
mkdir -p /url/local/docker/mysql_master/mysql/conf
mkdir -p /url/local/docker/mysql_master/mysql/mysql-files
# 编辑文件内容
vim /url/local/docker/mysql_master/mysql/conf/my.conf
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
2、启动mysql主服务
docker run \
--name mysql-master \
-d \
-p 3306:3306 \
--restart unless-stopped \
-v /url/local/docker/mysql_master/mysql/log:/var/log/mysql \
-v /url/local/docker/mysql_master/mysql/data:/var/lib/mysql \
-v /url/local/docker/mysql_master/mysql/conf:/etc/mysql \
-v /url/local/docker/mysql_master/mysql/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123456 \
--privileged=true \
mysql:8.0
3、重启mysql
docker restart mysql-master
4、进入容器里面
docker exec -it mysql-master bash
mysql -uroot -p123456
5、master容器实力内创建同步用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON*.* TO 'slave'@'%';
mysql从服务
- 1、新建挂载文件
mkdir -vp /url/local/docker/mysql-slave
2、编辑从服务的配置文件
mkdir -p /url/local/docker/mysql-slave/mysql/log
mkdir -p /url/local/docker/mysql-slave/mysql/data
mkdir -p /url/local/docker/mysql-slave/mysql/conf
mkdir -p /url/local/docker/mysql-slave/mysql/mysql-files
# 编辑文件内容
vim /url/local/docker/mysql-slave/mysql/conf/my.conf
vim /url/local/docker/mysql-slave/mysql/conf/my.conf
3、编辑从服务里面的文件
```shell
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1
4、启动mysql从服务
docker run -p 3308:3306 --name mysql-slave \
-v /url/local/docker/mysql-slave/mysql/log:/var/log/mysql \
-v /url/local/docker/mysql-slave/mysql/data:/var/lib/mysql \
-v /url/local/docker/mysql-slave/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0
5、启动slave容器(如果先启动,后指定容器数据卷路径,需要执行此操作)
docker restart mysql-slave
6、在主库中查看主从同步状态
show master
status;
7、进入从服务器的容器内不
docker exec -it mysql-slave bash
mysql -uroot -p123456
8、在数据库中配置主从复制
change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
- 参数说明
master_host:主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。
9、从数据库中查看主从同步状态
show skave status \G;
10、在从数据库中开启主从同步进入从数据库中
start slave;
11、查看从数据库状态发现已经同步
Slave_IO_Running: yes
Slave_SQL_Running: yes
主从复制测试
eg:主机新建库,使用库-新建表,插入数据 ok 从机使用库-查看记录,ok
边栏推荐
- 【Message Center】Architecture Preparation
- Redis 面试题
- 【DevOps】jekins部署(一)
- C语言——void指针、NULL指针、指向指针的指针、常量和指针
- Mysql两个引擎对比
- [Microservice] Detailed explanation of nacos registration center and configuration center
- DSPE-PEG-Hydrazide,DSPE-PEG-HZ,磷脂-聚乙二醇-酰肼MW:1000
- Shell编程之正则表达式
- [Basic version] Integer addition, subtraction, multiplication and division calculator
- 二维数组实现八皇后问题
猜你喜欢
随机推荐
卷积神经网络表征可视化研究综述(1)
A Preliminary Study on Baidu Open Source e-chart
benchmark性能测试
Mysql two engines comparison
防汛添利器,数字技术筑起抗洪“大堤”
【LeetCode】1413. 逐步求和得到正数的最小值
Selenium - 如何用xpath快速定位路径?
【LeetCode】1898. 可移除字符的最大数目
C语言程序设计笔记(浙大翁恺版) 第十三周:文件
【最新】【获取ip】获取本地ip 获取本机ip地址
.NET现代应用的产品设计 - DDD实践
常见自动化测试工具及框架的选用
leetcode_jz
ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions unless TOP, OFFSET, or FOR XML is also specified
二维数组实现八皇后问题
极限挑战,如何做到分钟级搭建环境?
firewall防火墙详解
R7 6800H标压处理器+RTX 3050独显 无畏Pro15锐龙版高能开卖
[DevOps] jekins configuration (2)
【软考】2022年上半年软考过啦








