MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0

本文介绍如何在MAC OSX下无依赖安装MySQL 8.0.

前言

本文将介绍如何无痛的手动安装、配置、删除 MySQL 8.0

环境

名字 内容
环境 MAC OSX 10.15.3
版本 MySQL 8.0.20
CPU Intel® Core™ i7-5557U CPU @ 3.10GHz
内存 16 GB 1867 MHz DDR3
硬盘 APPLE SSD SM0 512G

一、安装

1. 下载 MySQL 安装包

我们到这里下载MySQL安装包!
MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第1张图片
这里一定要选择已经编译好的压缩包,因为这个分发版的依赖已经处理完毕.

2. 解压MySQL压缩包的内容

将下载好的MySQL安装包解压后得到一个文件夹!

将这个文件夹重命名为mysql之后放在自己喜欢的任何目录. (本文作者将其放在/Users/candy/Documents/mysql)
MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第2张图片

3. 初始化MySQL 8.x

首先, 我们打开终端并进入到mysql目录下!

[candy@MacBookPro:~] $ cd ~/Documents/mysql
[candy@MacBookPro:~/Documents/mysql] $

然后使用下面的命令初始化DB:

[candy@MacBookPro:~/Documents/mysql] $ bin/mysqld --initialize
2020-05-08T16:36:09.839845Z 0 [System] [MY-013169] [Server] /Users/candy/Documents/mysql/bin/mysqld (mysqld 8.0.20) initializing of server in progress as process 45273
2020-05-08T16:36:09.843099Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /Users/candy/Documents/mysql/data/ is case insensitive
2020-05-08T16:36:09.856119Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-05-08T16:36:10.294446Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2020-05-08T16:36:11.293945Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: u8kVd+miPXGk
[candy@MacBookPro:~/Documents/mysql] $

大家从输出结果中可以看到! MySQL在完成安装与初始化数据库之后, 同时也给告诉了开发者首次登陆MySQL的"一次性密码".

二、初始化

由于前文所述, MySQL一次性密码是用来初始化root账户的. 所以我们必须好好利用这次机会来初始化它.

1. 初始化用户

我们在之前的终端内执行这条命令来第一次启动mysql: bin/mysqld

[candy@MacBookPro:~] $ cd ~/Documents/mysql
[candy@MacBookPro:~/Documents/mysql] $ bin/mysqld --initialize
2020-05-08T16:36:09.839845Z 0 [System] [MY-013169] [Server] /Users/candy/Documents/mysql/bin/mysqld (mysqld 8.0.20) initializing of server in progress as process 45273
2020-05-08T16:36:09.843099Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /Users/candy/Documents/mysql/data/ is case insensitive
2020-05-08T16:36:09.856119Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-05-08T16:36:10.294446Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2020-05-08T16:36:11.293945Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: u8kVd+miPXGk
[candy@MacBookPro:~/Documents/mysql] $ bin/mysqld
2020-05-08T16:48:14.836423Z 0 [System] [MY-010116] [Server] /Users/candy/Documents/mysql/bin/mysqld (mysqld 8.0.20) starting as process 45301
2020-05-08T16:48:14.839920Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /Users/candy/Documents/mysql/data/ is case insensitive
2020-05-08T16:48:14.852527Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-05-08T16:48:14.992065Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2020-05-08T16:48:15.094908Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/tmp/mysqlx.sock' bind-address: '::' port: 33060
2020-05-08T16:48:15.189003Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2020-05-08T16:48:15.209717Z 0 [System] [MY-010931] [Server] /Users/candy/Documents/mysql/bin/mysqld: ready for connections. Version: '8.0.20'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server - GPL.

可以看到, MySQL已经在前台运行了!

这时候我们需要再启动一个终端来完成客户端的root用户初始化操作!

我们打开一个新的终端, 同样进入到之前MySQL的安装目录: /Users/candy/Documents/mysql.

[candy@MacBookPro:~] $ cd ~/Documents/mysql
[candy@MacBookPro:~/Documents/mysql] $

这时候我们使用bin目录内的mysql_secure_installation 来完成root用户初始化操作. 我们先执行以下这条命令:

[candy@MacBookPro:~/Documents/mysql] $ bin/mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root: 

可以看到这时候我们已经进入了用户交互命令行并且提示我们输入root密码.

还记得我们之前在初始化的时候得到的一次性密码么? 现在派上用处了!

复制之前得到的root密码, 敲击回车后就会变成下面这样:

[candy@MacBookPro:~/Documents/mysql] $ bin/mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:

The existing password for the user account root has expired. Please set a new password.

New password: 

这时候它提示我们重复输入2次一样的root新密码! 所以这里我们选择输入的2次密码为: [ROOT123456789.]

这个密码大家千万要记住! 更改完成之后, 会进行新一轮的交互提示:

[candy@MacBookPro:~/Documents/mysql] $ bin/mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:

The existing password for the user account root has expired. Please set a new password.

New password:

Re-enter new password:

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No:

这个提示是什么意思呢? 它告诉我们: 配置"密码校验组件"可以提高我们对密码的安全度, 并且帮助用户设置足够复杂的密码.

由于我们是开发环境, 所以这一步设置的意义并不大! 所以我们选择不配置(直接按回车), 然后回车跳过"密码校验组件"配置流程.

Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) :

 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :

 ... skipping.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

 ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

 ... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

 ... skipping.
All done!

后续还有几个交互流程, 我们直接按回车跳过即可!

但是为了帮助大家了解, 这里还是为大家讲述下这几个流程的意义:

  1. 再次修改root密码; 开发环境跳过即可;
  2. 删除匿名用户登录; 开发环境跳过即可;
  3. 关闭root用户远程登录; 开发环境跳过即可;
  4. 删除test数据库; 开发环境跳过即可;
  5. Y/y则刷新权限;

这时候, 我们已经就已经完成了MySQL的所有初始化操作.

2. 创建一个新的用户

依照前文所述, 我们都没有使用GUI工具来完成MySQL连接.

现在我们使用大家熟悉的MySQL navicat来连接到我们刚刚初始化好的MySQL, 这里的密码使用我们新修改的密码.

MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第3张图片

点击测试连接, 提示连接成功!

MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第4张图片

MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第5张图片

可以看到, 我们已经能正确连接刚刚搭建好的MySQL数据库了.

MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第6张图片

现在我们点击用户图标, 这里可以看到我们当前数据库存在的所有用户.

MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第7张图片
现在我们新增一个admin用户, 并且设置密码为:[admin123456789]!

再给与它所有权限(ALL PRIVILEGES). 最后设置密码过期时间为永不过期(NEVER).

MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第8张图片
MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第9张图片
MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第10张图片

这时候, 我们的新用户创建完毕了. 它可以代替我们使用root权限来管理MySQL了.

三、测试

现在测试一下我们刚刚安装的MySQL 8.0能不能正常运行吧! 我这里会创建一个名为: cfadmin的数据库, 并且执行下面这样的脚本.


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

# ----------------------------
# Table structure for cfadmin_headers
# ----------------------------
CREATE TABLE IF NOT EXISTS `cfadmin_headers` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `name` varchar(255) NOT NULL COMMENT '头部名称',
  `url` varchar(255) NOT NULL COMMENT '头部URL',
  `create_at` int(11) unsigned NOT NULL COMMENT '创建时间',
  `update_at` int(11) unsigned NOT NULL COMMENT '修改时间',
  `active` tinyint(4) unsigned NOT NULL COMMENT '删除标志',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='顶部菜单表';

# ----------------------------
# Table structure for cfadmin_menus
# ----------------------------
CREATE TABLE IF NOT EXISTS `cfadmin_menus` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `parent` int(11) unsigned NOT NULL COMMENT '父菜单ID',
  `name` varchar(255) NOT NULL COMMENT '菜单名称',
  `url` varchar(255) DEFAULT NULL COMMENT '菜单链接',
  `icon` char(255) DEFAULT NULL COMMENT '菜单图标',
  `create_at` int(11) unsigned NOT NULL COMMENT '创建时间',
  `update_at` int(11) unsigned NOT NULL COMMENT '更新时间',
  `active` tinyint(4) unsigned NOT NULL COMMENT '删除标志',
  PRIMARY KEY (`id`),
  KEY `parant_index` (`parent`) USING BTREE COMMENT '父ID索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='侧边菜单表';

# ----------------------------
# Table structure for cfadmin_permissions
# ----------------------------
CREATE TABLE IF NOT EXISTS `cfadmin_permissions` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `role_id` int(11) unsigned NOT NULL COMMENT '所属角色',
  `menu_id` int(11) unsigned NOT NULL COMMENT '所属菜单',
  `create_at` int(11) unsigned NOT NULL COMMENT '创建时间',
  `update_at` int(11) unsigned NOT NULL COMMENT '修改时间',
  `active` tinyint(4) unsigned NOT NULL COMMENT '是否启用',
  PRIMARY KEY (`id`),
  KEY `com_index` (`active`,`role_id`,`menu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限表';

# ----------------------------
# Table structure for cfadmin_roles
# ----------------------------
CREATE TABLE IF NOT EXISTS `cfadmin_roles` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `name` varchar(255) NOT NULL COMMENT '角色名称',
  `is_admin` tinyint(4) unsigned NOT NULL COMMENT '管理员标志',
  `create_at` int(11) unsigned NOT NULL COMMENT '创建时间',
  `update_at` int(1) unsigned NOT NULL COMMENT '修改时间',
  `active` tinyint(4) unsigned NOT NULL COMMENT '删除标志',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色表';

# ----------------------------
# Table structure for cfadmin_tokens
# ----------------------------
CREATE TABLE IF NOT EXISTS `cfadmin_tokens` (
  `uid` int(11) unsigned NOT NULL COMMENT '用户ID',
  `name` varchar(255) NOT NULL COMMENT '用户名称',
  `token` varchar(255) NOT NULL COMMENT '用户TOKEN',
  `create_at` int(11) unsigned NOT NULL COMMENT '登录时间',
  PRIMARY KEY (`uid`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4 COMMENT='用户Token表';

# ----------------------------
# Table structure for cfadmin_users
# ----------------------------
CREATE TABLE IF NOT EXISTS `cfadmin_users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `name` varchar(255) NOT NULL COMMENT '用户名',
  `username` varchar(255) NOT NULL COMMENT '用户账户',
  `password` varchar(255) NOT NULL COMMENT '用户密码',
  `email` varchar(255) NOT NULL COMMENT '用户邮箱',
  `phone` bigint(11) unsigned NOT NULL COMMENT '用户手机',
  `role` int(11) unsigned NOT NULL COMMENT '用户角色',
  `create_at` int(11) unsigned NOT NULL COMMENT '创建时间',
  `update_at` int(11) unsigned NOT NULL COMMENT '修改时间',
  `active` tinyint(4) unsigned NOT NULL COMMENT '删除标志',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

执行完毕之后, 我将运行自己编写的Lua Web框架. 将账户密码改为admin/admin123456789. 运行后输出结果为这样:

[candy@MacBookPro:~/Documents/core_framework] $ ./cfadmin
[2020/05/09 01:32:20] [INFO] httpd listen: 0.0.0.0:8080
[2020/05/09 01:32:20] [INFO] httpd Web Server Running...

看来是正确运行了. 现在让我打开后台页面看看是否正常!

MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第11张图片

输入后台默认用户名/密码: admin, 看看是否能够正常登陆!

MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第12张图片

MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第13张图片

MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第14张图片
MAC OSX 10.15 无痛的手动安装、配置、删除 MySQL 8.0_第15张图片

这就是我推荐的手动方式!安装完成后正常使用.

四、后台运行与停止

之前我们都是让MySQL运行在前台, 每次做这样的操作感觉非常麻烦!

那么如何后台运行MySQL呢?

  1. 使用命令将mysql目录移动到指定的文件夹下: sudo mv mysql /usr/local/
  2. support-files目录下的启动脚本放置在/usr/local/bin命令下: ln -s /usr/local/mysql/support-files/mysql.server /usr/local/bin/
  3. 在命令行执行mysql.server start / stop来启动与停止MySQL

五、删除与卸载

如果有那么一天, 你不再需要MySQL了. 你可能会选择执行臭名昭著的rm -rf /usr/local/mysql命令 !

这样, 它就从你的磁盘中永远消失了. 当然, 如果你想重新安装一个新的MySQL. 这个快速重建方式, 我也是比较推荐的. : )

六、最后

问题来了: 同学们!你们在Linux下是如何安装与管理方式呢?

你可能感兴趣的:(MySQL)