ubuntu 安装挂载mysql

发布时间 2023-04-20 21:39:12作者: 夏目&贵志

因为有两台电脑,所以准备把ubuntu电脑作成对外服务提供,各种数据库,中间件都使用docker安装管理,然后挂载配置和日志到本地,提供给另一台电脑的对外服务。

安装docker

sudo apt search docker
sudo apt install docker.io

看到很多安装都繁琐,我也还是在初步使用,如上安装暂时没有发现有什么问题,出现问题再更改吧。

# 简单的docker命令
sudo docker ps -a               # 查看容器状态,在这可以看到容器的名字,id,创建时间和端口信息
sudo docker images              # 查看镜像
sudo docker pull something      # 拉取something镜像
sudo docker run -d --name abaaba -p src_port:container_port something      #后台运行something,链接本地src_port端口到container_port容器端口
sudo docker exec -it container_id /bin/bash        # 进入指定id的容器
sudo docker rm -f container_id                     # 删除指定id的容器
sudo docker cp src_file abaaba:/d/a                # 复制主机src_file文件到abaaba容器根目录下d文件夹内的a文件中;也可以反过来用,把容器内文件复制到本地

docker安装mysql

sudo docker pull mysql
# 如上把刚拉取的mysql跑起来看看具体信息
sduo docker run -d -p 3306:3306 --name mysql_service -e MYSQL_ROOT_PASSWORD=root  mysql
sudo docker exec -it mysql_service /bin/bash

如下是mysql容器内信息:

# 可以看到容器主体信息就这样,是一个oracle打造的linux server,专门供给oracle类的服务,比如mysql
bash-4.4# cat /etc/os-release 
NAME="Oracle Linux Server"
VERSION="8.7"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="8.7"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Oracle Linux Server 8.7"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:8:7:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://bugzilla.oracle.com/"

ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8"
ORACLE_BUGZILLA_PRODUCT_VERSION=8.7
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=8.7
bash-4.4# mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 
bash-4.4# vim /etc/mysql/my.cnf
bash: vim: command not found
# 各种command not found
bash-4.4# apt install aaa
bash: apt: command not found
bash-4.4# dnf install vim
bash: dnf: command not found
bash-4.4# yum install aaa
bash: yum: command not found
bash-4.4# 

本来是找到了conf文件,想直接在容器内部编辑一下的,结果啥习惯用的命令都没有,用yum,apt都试了一下,看来不是redhat和debian包装的豁,然后搜了一下oracle linux的包管理器(因为上面查信息看到的就是这个嘛),发现它们可以用dnf(某博客找到的,又拿来碰了一下),骗鬼的。干脆放弃,反正可以用docker cp,接下来就确定一下mysql的几个重要目录:logs,data和conf目录

bash-4.4# ls /var/lib | grep mysql
mysql
mysql-files
mysql-keyring
bash-4.4# ls /etc/mysql/       
conf.d  
bash-4.4# ls /var/log
mysqld.log
bash-4.4# 

好,确定了那几个默认路径没错,这就算是目标所在了,默认信息可以在docker官网上看,然后对照,讲究个因地制宜。

挂载mysql重要文件到本地

知道不少信息以后就开始配置,一个是挂载mysql的日志,conf和data目录到本地,另一个就是设置mysql远程访问权限。

sudo docker run -d --restart=always -p 3306:3306 \
-v /opt/services/mysql/conf:/etc/mysql/conf.d \
-v /opt/services/mysql/logs:/var/log \
-v /opt/services/mysql/data:/var/lib \
--name mysql_service \
-e MYSQL_ROOT_PASSWORD=123456

# 看看跑起来了没
sudo docker ps -a
# 进入容器进行远程访问设置
sudo docker exec -it mysql_service /bin/bash

如上,-d参数设置容器后台运行,链接好默认端口,-v参数链接本地和容器目录,也就是前面找的那几个data,log和conf文件夹了,再来设置容器名,还有几个容器内部的环境参数,具体可参考上面docker官网的信息,这里是指定一个root用户的密码,方便后续设置。

设置远程访问

bash-4.4# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.33 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

进入mysql的shell界面以后,进行以下设置:

# 进入mysql database
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
# 查看用户信息,主要确定是否有两个root用户
mysql> select host, user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.00 sec)

# 删掉主机不限定的root用户,方便后面修改权限
mysql> delete from user where host='%' and user='root';
Query OK, 1 row affected (0.01 sec)

mysql> select host, user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
4 rows in set (0.00 sec)

# 把删掉的用户添加回来
mysql> update user set host='%' where user='root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

# 刷权限
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

# 设置远程访问
mysql> alter user 'root'@'%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;

上面设置要根据不同版本有所变通,然后检验一下远程访问,我用另一台电脑,连上同一个wifi,两台电脑就在同一个局域网了,网络连通性ok,然后使用服务的电脑输入mysql -h 192.168.0.100 -uroot -p命令,要记得在使用服务的电脑也装上mysql客户端并确保命令可用,当然也可以用其他工具测试,比如navicat,可惜付费,另外就是注意ip问题了。

好,搞定。