本文介绍如何在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 |
我们到这里下载MySQL
安装包!
这里一定要选择已经编译好的压缩包,因为这个分发版的依赖已经处理完毕.
将下载好的MySQL
安装包解压后得到一个文件夹!
将这个文件夹重命名为mysql
之后放在自己喜欢的任何目录. (本文作者将其放在/Users/candy/Documents/mysql
)
首先, 我们打开终端并进入到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账户的. 所以我们必须好好利用这次机会来初始化它.
我们在之前的终端内执行这条命令来第一次启动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!
后续还有几个交互流程, 我们直接按回车跳过即可!
但是为了帮助大家了解, 这里还是为大家讲述下这几个流程的意义:
root
密码; 开发环境跳过即可;root
用户远程登录; 开发环境跳过即可;test
数据库; 开发环境跳过即可;Y/y
则刷新权限;这时候, 我们已经就已经完成了MySQL
的所有初始化操作.
依照前文所述, 我们都没有使用GUI工具
来完成MySQL连接.
现在我们使用大家熟悉的MySQL navicat
来连接到我们刚刚初始化好的MySQL
, 这里的密码使用我们新修改的密码.
点击测试连接
, 提示连接成功!
可以看到, 我们已经能正确连接刚刚搭建好的MySQL
数据库了.
现在我们点击用户
图标, 这里可以看到我们当前数据库存在的所有用户.
现在我们新增一个admin
用户, 并且设置密码为:[admin123456789
]!
再给与它所有权限(ALL PRIVILEGES
). 最后设置密码过期时间为永不过期(NEVER
).
这时候, 我们的新用户创建完毕了. 它可以代替我们使用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...
看来是正确运行了. 现在让我打开后台页面看看是否正常!
输入后台默认用户名/密码: admin
, 看看是否能够正常登陆!
这就是我推荐的手动方式!安装完成后正常使用.
之前我们都是让MySQL
运行在前台, 每次做这样的操作感觉非常麻烦!
那么如何后台运行MySQL
呢?
mysql
目录移动到指定的文件夹下: sudo mv mysql /usr/local/
support-files
目录下的启动脚本放置在/usr/local/bin
命令下: ln -s /usr/local/mysql/support-files/mysql.server /usr/local/bin/
mysql.server start / stop
来启动与停止MySQL
。如果有那么一天, 你不再需要MySQL
了. 你可能会选择执行臭名昭著的rm -rf /usr/local/mysql
命令 !
这样, 它就从你的磁盘中永远消失了. 当然, 如果你想重新安装一个新的MySQL
. 这个快速重建方式, 我也是比较推荐的. : )
问题来了: 同学们!你们在Linux下是如何安装与管理方式呢?