Ubuntu 一行命令装软件——MySQL

304 阅读3分钟

导读

做 demo 测试,MySQL 肯定绕不过去,当然最好能不污染本机环境,最最好还有测试数据。安排!

正文

安装 MySQL

两种安装方式二选一,Docker 方式理论上会多占一些资源,但是可以保持本机环境的纯净,所以还是推荐 Docker 方式。

直接安装

直接运行下面的命令,保险一些的话可以先运行一下 sudo apt update

sudo apt install mysql-server -y

安装完成后,通常还需要把绑定的 IP 修改一下。运行 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf,找到 bind-address 修改为 0.0.0.0,保存退出,然后运行 sudo systemctl restart mysql.service 即可。这时候本机的数据库服务理论上就可以被外部访问到了,但更重要的是可以被本机起的 docker 服务访问到,后者才是更常见的场景。

Docker 安装

拉镜像,启动容器属于基本操作,这里主要说一下当容器被比较彻底的重启时,如何保证数据的持久性。其实方法也简单,MySQL Docker Hub 文档 中已经给出了解决办法,就是把容器里的存储目录指定为本机的某个目录即可,这个目录要自己创建。综合命令如下:

mkdir -p ~/dbs/mysql/data && sudo docker pull mysql:latest && \
sudo docker run --name mysql8 -v ~/dbs/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

目前默认安装的版本是 8,如果想安装 5.7 版本的,自行修改 tag 即可。

生成测试账号

通常我们要生成一个测试账号,方便外部链接和使用,运行以下命令,就可以创建一个用户名和密码都为 test 的用户,该用户可以通过所有 host(%) 被连接,且有所有库的 select 权限:

sudo mysql -e "CREATE USER 'test'@'%' IDENTIFIED BY 'test';ALTER USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY 'test';GRANT SELECT ON *.* TO 'test'@'%';FLUSH PRIVILEGES;"

完成后,在 mysql 状态下执行 select host, user from mysql.user; 查看用户是否创建成功。另外,删除用户的命令是 DROP USER 'test'@'%';,如果建错了重新来就行了。

如果是 Docker 启动的话,要先运行 sudo docker exec -it mysql8 bash 进入到刚容器内,然后运行下列命令:

mysql -uroot -proot -e "CREATE USER 'test'@'%' IDENTIFIED BY 'test';ALTER USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY 'test';GRANT SELECT ON *.* TO 'test'@'%';FLUSH PRIVILEGES;"

验证方式同上,成功后后用 exit 命令或 ctrl + D 快捷键退出容器。

生成测试数据

然后是生成测试数据,这个是一个项目,详见 datacharmer/test_db。直接安装的按照下面的步骤执行命令即可

git clone https://github.com/datacharmer/test_db.git
cd test_db
sudo mysql < employees.sql

完成后,执行 sudo mysql 进入命令行模式,输入 show databases; 查看是否有 employees 这个 db,如果有证明测试数据导入成功。

如果是 Docker 容器的话,需要先把 test_db 目录 cp 进容器,然后在容器内执行命令,如下:

sudo docker cp ./test_db mysql8:/test_db
sudo docker exec -it mysql8 bash
# 进入容器后
cd test_db
mysql -uroot -proot < employees.sql

验证方式同上。

一行命令

直接安装版

sudo apt install mysql-server -y && \
sudo mysql -e "CREATE USER 'test'@'%' IDENTIFIED BY 'test';ALTER USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY 'test';GRANT SELECT ON *.* TO 'test'@'%';FLUSH PRIVILEGES;" && \
git clone https://github.com/datacharmer/test_db.git && cd test_db && \
sudo mysql < employees.sql && \
cd .. && rm -rf test_db

记得手动修改 bind_address0.0.0.0

Docker 版

mkdir -p ~/dbs/mysql/data && sudo docker pull mysql:latest && \
sudo docker run --name mysql8 -v ~/dbs/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest && \
git clone https://github.com/datacharmer/test_db.git && \
sudo docker cp test_db mysql8:/test_db && rm -rf test_db && \
sudo docker exec -it mysql8 bash
# 进入容器后
mysql -uroot -proot -e "CREATE USER 'test'@'%' IDENTIFIED BY 'test';ALTER USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY 'test';GRANT SELECT ON *.* TO 'test'@'%';FLUSH PRIVILEGES;" && \
cd test_db && mysql -uroot -proot < employees.sql && cd .. && rm -rf test_db && \
exit