当前位置:   article > 正文

linux安装docker教程+mysql安装_linux docker mysql

linux docker mysql

一、linux安装docker教程

第一步、关闭SELINUX服务

 修改文件后的重启linux,重启命令为:reboot 

注意此处虚拟机里修改重启无法启动linux系统成功,处理方法:
1、重启Linux按e进入系统启动项修改参数

2、在linux16的行位添加 selinux=0
按ctrl + x之后启动linux系统

 3、启动之后,修改/etc/selinux/config文件

第二步、安装Docker服务

第三步、DockerHub是Docker公共镜像仓库 

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
该脚本可以将 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。适用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1,其他版本可能有细微不同。这里需要重启docker才会生效

daemon.json 内容后面如果有,号就的去除
{“registry-mirrors”: [“http://f1361db2.m.daocloud.io”]}

--------------------------------------------------------------------------------------------------------------------

CentOS安装Docker,启动时候报错Failed to start docker.service: Unit docker.service not found.(如下:),原因是CentOS默认使用podman代替docker,所以需要将podman卸载.

解决办法:

问题描述:在Centos8系统中,使用docker run时,出现如下报错:
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Error: open /proc/self/uid_map: no such file or directory

解决办法:
1,卸载podman软件(可以使用rpm -qa|grep docker)
yum remove docker
2,下载docker-ce源
curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
3,安装docker-ce
yum install docker-ce -y

问题原因分析:
Centos 8使用yum install docker -y时,默认安装的是podman-docker软件
 

二、使用docker安装mysql

1.在docker hub上查看要下载的mysql镜像名称:

docker hub镜像仓库中为我们开发要
打开docker hub 网站
dockerHub官网地址dockerHub官网地址dockerHub官网地址https://registry.hub.docker.com/
在上方搜索栏里输入mysql  找到要拉取的镜像版本,在tag下找到版本

回到虚拟机界面,执行下面命令来拉取mysql镜像
不指定版本号,默认下载最新版本docker pull mysql

指定版本号:docker pull mysql:5.7

 

2.镜像拉取完成后,用该镜像创建mysql实例,使用下面的命令来创建

docker run --privileged=true -p 5306:3306 -v /usr/local/mysql/conf:/etc/mysql/conf.d:rw -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql3 -d mysql:5.7

这里对上面的参数做下简单的介绍:
配置端口映射:-p 3306:3306
将容器的3306端口映射到主机的3306端口

配置mysql数据卷挂载
-v /usr/local/mysql/log:/var/log/mysql(日志文件挂载)
将容器中的日志文件夹挂载到主机对应的/var/log/mysql文件夹中
-v /usr/local/mysql/data:/var/lib/mysql(数据文件挂载)
将容器中的数据文件夹挂载到主机对应的/var/lib/mysql文件夹中
-v /usr/local/mysql/conf:/etc/mysql/conf.d:rw(配置文件挂载)
将容器的配置文件夹挂载到主机对应的/etc/mysql文件夹中(容易出错看错误2)
注(这里所提的主机指的是当前的linux主机)

配置用户:-e MYSQL_ROOT_PASSWORD=root
设置初始化root用户的密码

命名:--name mysql3

指定镜像资源:-d mysql:5.7
-d:以后台方式运行实例
mysql:5.7:指定用这个镜像来创建运行实例

下面演示是用root用户来执行的命令,如果当前不是root用户,要在命令前加 sudo,以管理员方式来运行, 创建成功后使用下面命令查看下创建好的mysql实例:docker ps -a

 相关命令:

查看容器状态:docker ps -a
启动容器mysql3:docker start mysql3
停用容器mysql3:docker stop mysql3
重新进入容器:docker exec -it mysql3 bash
删除mysql3容器:docker rm mysql3

三、遇到无法启动的问题时,查看日志发现的错误

docker logs --tail -n mysql3

错误1、You need to specify one of the following as an environment variable:
    - MYSQL_ROOT_PASSWORD
    - MYSQL_ALLOW_EMPTY_PASSWORD
    - MYSQL_RANDOM_ROOT_PASSWORD

解释: 由于mysql没有指定root的登录密码导致无法启动,默认mysql配置是不允许空密码登录的

原因:上面执行命令的时候写错了环境变量, MYSQL_SERVICE_PASSWORD 应该修改成 MYSQL_ROOT_PASSWORD

错误2、mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory)

解释:可能由于不同的mysql版本,/etc/mysql目录下的结构不一样

原因: 由于mysql的配置目录/etc/mysql下有两个空目录, 上面的执行命令仅挂载了当前目录,导致里面的两个目录没有权限挂载到宿主机内, 应该将挂载目录指定到具体的目录下: -v /usr/local/mysql/conf:/etc/mysql/conf.d:rw

错误3-1、mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (OS errno 13 - Permission denied)

错误3-2、chown: changing ownership of '/var/lib/mysql': Permission denied

 

 原因: 启动时没有足够的权限, /var/lib/mysql目录没有写权限, 可能是部署docker时指定了--user xxx某个权限不足的用户

解决方法有三个:

1.在docker run中加入 --privileged=true 给容器加上特定权限

2.关闭selinux csdn

3.在selinux添加规则,修改挂载目录

本人使用的是第1种解决方案

四、使用docker安装mysql配置主从(待本人自测成功)

1、创建主库(绿色字改成自己对应的数据)

1-1、创建主库:

docker run --privileged=true -p 4307:3306 -v /usr/local/docker_mysql/4307master/conf:/etc/mysql/conf.d:rw -v /usr/local/docker_mysql/4307master/data:/var/lib/mysql -v /usr/local/docker_mysql/4307master/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=root4307 --name mysql4307master -d mysql:5.7

1-2、进入主库复制my.cnf配置文件

docker exec -it mysql4307master bash

1-3、找到文件并进行复制:

docker cp mysql4307master:/etc/my.cnf /usr/local/docker_mysql/4307master/conf

1-4、编辑my.cnf文件:

  1. [mysqld]
  2. #日志设置
  3. #这里是容器里myslq里目录对应日志输出到挂载目录的
  4. log-error = /var/log/mysql/db-err.log #错误日志路径
  5. slow-query-log-file = /var/log/mysql/db-slow.log #慢SQL日志路径
  6. long-query-time = 3 #怎样才算是慢sql,单位是秒
  7. server_id=4307 #server_id唯一
  8. binlog-ignore-db=mysql #指定不需要同步的数据库名称
  9. log-bin=mall-mysql-bin #开启二进制日志功能
  10. binlog_cache_size=10M #设置二进制日志使用内存大小(事务)
  11. binlog_format=mixed #设置使用的二进制日志的格式(mixed,statement,row)
  12. expire_logs_days=7 #二进制日志过期清理时间,默认值为0,表示不自动清理
  13. slave_skip_errors=1062 #跳过主从复制中遇到的所有的错误或指定类型的错误,避免slave端复制中断
  14. #1062错误是指一些组件重复,1032错误是主从数据库数据不一致
  15. !includedir /etc/mysql/conf.d/
  16. !includedir /etc/mysql/mysql.conf.d/

 重启下:docker restart mysql4307master

1-6、创建数据同步账号:

create user 'slave'@'%' identified by 'slave123';

grant replication slave,replication client on *.* to 'slave'@'%';

2、 从服务器配置

2-1、创建从库(步骤和1-1、1-2、1-3相同)

2-2、编辑my.cnf文件:

  1. [mysqld]
  2. #日志设置
  3. long-query-time = 3
  4. #这里是容器里myslq里目录对应日志输出到挂载目录的
  5. slow-query-log-file=/var/log/mysql/db-slow.log
  6. log-error=/var/log/mysql/db-err.log
  7. server_id=4308
  8. binlog-ignore-db=mysql
  9. log-bin=mall-mysql-bin
  10. binlog_cache_size=1M
  11. binlog_format=mixed
  12. expire_logs_days=7
  13. slave_skip_errors=1062
  14. #replay_log=mall-mysql-replay-bin #配置中级日志
  15. log_slave_updates=1 #1代表slave写进自己的二进制
  16. read_only=1 #设置只读,super权限除外
  17. !includedir /etc/mysql/conf.d/
  18. !includedir /etc/mysql/mysql.conf.d/

三、配置主从

1、进入主数据库,查看主从同步状态

docker exec -it mysql4307master bash

登录mysql后台:mysql -uroot -p

然后查看主库状态:show master status;

注意:后面配置主从需要这个

2、进入从数据库,配置主从

docker exec -it mysql4308 bash

登录mysql后台:mysql -uroot -p

配置主从:change master to master_host='192.168.3.150',master_user='slave',master_password='slave123',master_port=4307,master_log_file='mall-mysql-bin.000002',master_log_pos=617,master_connect_retry=30;

 参数说明:

 查看主从状态:

start slave;
show slave status\G

 此处正常显示为Slave_IO_Running: Yes,Slave_SQL_Running: Yes

四、验证

验证我就不验证啦 大家自己验证自己的吧

错误1:安装mysql后无法远程连接,命令连接无需密码

 上图看到没  我根本没输入密码就自动登录的,但此时我无法用Navicat连接mysql

解决如下:如果是我这样那就进行如下操作:

重新设置下root密码:set password for 'root'@'localhost'=password('mysql4307');

 为避免麻烦,再次设置远程访问:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'mysql4307' WITH GRANT OPTION;

错误2:

Last_IO_Errno: 2061,Last_IO_Error: error connecting to master 'slave@192.168.10.150:3307' - retry-time: 30 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

解决如下:

  1. mysql> alter user 'slave'@'%' identified with mysql_native_password by'slave123';
  2. mysql> flush privileges;

这时又会抛出一个问题

Last_IO_Errno: 13117
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).

解决方法如下 

  1. #进入从数据库容器
  2. mysql> show variables like 'server_id';
  3. +---------------+-------+
  4. | Variable_name | Value |
  5. +---------------+-------+
  6. | server_id | 101 |
  7. +---------------+-------+
  8. 1 row in set (0.04 sec)
  9. mysql> set global server_id=102;
  10. mysql> stop slave;
  11. mysql> start slave;

错误3:Slave_SQL_Running: No

 在从库上停止slave:mysql> stop slave;

重置同步:mysql> reset slave;

重新设置同步节点:change master to master_host='192.168.3.150',master_user='slave',master_password='slave123',master_port=4307,master_log_file='mall-mysql-bin.000002',master_log_pos=617,master_connect_retry=30;

开启slave:mysql> start slave;

查看slave状态:mysql> show slave status\G;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/507090
推荐阅读
相关标签
  

闽ICP备14008679号