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文件:

[mysqld]
#日志设置
#这里是容器里myslq里目录对应日志输出到挂载目录的
log-error = /var/log/mysql/db-err.log   #错误日志路径
slow-query-log-file = /var/log/mysql/db-slow.log  #慢SQL日志路径
long-query-time = 3 #怎样才算是慢sql,单位是秒

server_id=4307                            #server_id唯一
binlog-ignore-db=mysql                   #指定不需要同步的数据库名称
log-bin=mall-mysql-bin                   #开启二进制日志功能
binlog_cache_size=10M                     #设置二进制日志使用内存大小(事务)
binlog_format=mixed                      #设置使用的二进制日志的格式(mixed,statement,row)
expire_logs_days=7                       #二进制日志过期清理时间,默认值为0,表示不自动清理
slave_skip_errors=1062     #跳过主从复制中遇到的所有的错误或指定类型的错误,避免slave端复制中断
                           #1062错误是指一些组件重复,1032错误是主从数据库数据不一致 


!includedir /etc/mysql/conf.d/
!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文件:

[mysqld]

#日志设置
long-query-time = 3
#这里是容器里myslq里目录对应日志输出到挂载目录的
slow-query-log-file=/var/log/mysql/db-slow.log  
log-error=/var/log/mysql/db-err.log

server_id=4308
binlog-ignore-db=mysql
log-bin=mall-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
#replay_log=mall-mysql-replay-bin    #配置中级日志
log_slave_updates=1                 #1代表slave写进自己的二进制
read_only=1                         #设置只读,super权限除外

!includedir /etc/mysql/conf.d/
!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.

解决如下:

mysql> alter user 'slave'@'%' identified with mysql_native_password by'slave123';
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).

解决方法如下 

#进入从数据库容器
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 101   |
+---------------+-------+
1 row in set (0.04 sec)
 
mysql> set global server_id=102;
mysql> stop slave;
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;

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值