macOS安装mysql

安装Mysql

安装之前,需要查看你的 macOS 的版本,支持哪些版本的 mysql ,来对应安装,否则会出现不兼容的情况。mysql 的文档列出了各个版本支持的平台,对于 macOS,如下

image-20180627104047807

image-20180627104126873

以我的 macOS 10.13 为例,支持64位8.0、5.7、5.6版本,鉴于8.0正式版本刚发布不久(2018.4),我们这里选择5.7版本来进行安装。

更多详细的平台支持信息,可以去 官网 查询

选择了版本,下面就可以进行安装了。mac 平台主要有2中方式来安装 mysql

  • 原生包安装器 (DMG) 来进行安装。这种方式需要拥有 mac 系统的管理员权限。
  • 使用二进制压缩包来进行安装,安装包格式一般是 mysql-*VERSION*-*OS*.tar.gz 。可以使用 tar 或者 gzip 命令将 mysql 安装在任意目录。注意这种方式可以没有管理员权限。
  • 源码编译安装,需要预先安装 cmake,make,boost c++库等,比较繁琐。

简单起见,我们选择第一种方式(如果你没有管理员权限,则只能选第二种方式)

  1. 下载 .dmg 格式的安装包,一般我们使用社区版本,例如 mysql-5.7.22-macos10.13-x86_64.dmg,下载地址为 mysql5.7下载

  2. 下载完成后双击执行安装,如下

    image-20180627110750323

  3. 安装过程中,会为 root 账户生成一个随机的密码,注意记住该密码,后面会用到。

  4. 安装完成后,我们需要为 root 修改密码,这是因为之前安装时生成的密码自动过期,只能用来登录,而不能进行操作,因此需要使用者再手动修改密码,这样就保障了安全性。

修改root密码

修改密码之前,先手动启动 mysql 服务

mysql 被安装在/usr/local/mysql 目录,我们将 bin 目录添加到 PATH 环境变量以方便执行 mysql 命令

1
2
$ echo 'export PATH=/usr/local/mysql/bin:$PATH' > ~/.bash_profile
$ source ~/.bash_profile

然后就可以使用mysqld_safe 命令手动启动 mysql 进程了

1
$ sudo mysqld_safe --user=mysql &

使用生成的随机密码登录到 mysql

1
$ mysql -uroot -p

为 root 账户设置新的密码

1
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

退出后重新使用新密码登录

1
$ mysql -uroot -p

这样我们就能执行 mysql 的操作了

另外,我们还要将刚才手动启动的 mysql 关闭,然后使用正式方式启动mysql 服务

1
$ sudo mysqladmin -u root -p shutdown

我们使用 macOS 下的服务面板来启动 mysql,依次点击系统左上角的 苹果 图标 ->系统偏好设置->MySQL->Start MySQL Server

image-20180627141058962

新建 user

先使用修改后的 root 密码登录

1
$ mysql -uroot -p

为 root 赋予所有权限

1
mysql> GRANT all ON *.* to root@localhost IDENTIFIED BY 'root_passwd';

新建 philip 用户并赋予 以 db_ 开头命名的库的查询修改等权限

1
2
mysql> GRANT LOCK TABLES,select,insert,update,delete,create,drop,index,alter ON `db\_%`.* to philip@"10.%.%.%" IDENTIFIED BY 'tmpP001';
mysql> FLUSH PRIVILEGES;

新建 query 用户并赋予以 db_oss_开头命名的库的只读权限

1
2
mysql> GRANT select ON `db\_oss\_%`.* to query@"localhost" IDENTIFIED BY '123';
mysql> FLUSH PRIVILEGES;

编码配置

配置文件

在 windows 平台,如果使用安装程序安装,则安装程序会在 mysql 安装目录自动创建一个名为 my.ini 的文件作为mysql 服务的配置文件;如果是使用 zip 压缩包安装,则需要拷贝my-default.ini为 my.ini 作为配置文件(注意,MySQL 5.7.18版本之后的 mysql 压缩包不包括 my-default.ini)

在非 windows 平台,没有默认的配置文件,mysql 启动时会使用缺省的参数。因此我们需要手动创建 my.cnf 。

以下命令可以查看 mysql 的参数列表以及server 启动时会读取哪些配置文件

1
$ mysqld --verbose --help | less

搜索 my.cnf 可以看到,配置文件读取顺序为

1
2
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

我们选择其中一个目录新建 my.cnf 即可。

存储编码

字符集不仅影响 mysql 的数据存储,也影响 client 程序和 mysql server 的连接交互,因此在考虑设置编码的时候,这两方面都需要考虑。

mysql 5.7 版本默认的存储字符集和字符比较规则为 latin1, latin1_swedish_ci,这与通用的 utf8 标准不兼容,因此我们需要修改 mysql 的默认 character set 和 collation。字符集设置按照层级分为四个:server, database, table, and column。

首先查看现有的设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
mysql> show VARIABLES like '%character%';
+--------------------------+-----------------------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-5.7.22-macos10.13-x86_64/share/charsets/ |
+--------------------------+-----------------------------------------------------------+
8 rows in set (0.01 sec)

mysql> show VARIABLES like '%collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

可以看到 character_set_database、character_set_server、collation_database、 collation_server 几个选项的值都为 latin1,需要修改为 utf8。

在 HOME 目录创建 my.cnf 文件作为配置文件,添加以下内容

1
2
3
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

完成后使用 mac 偏好设置里 的 mysql launch daemon panel来重新启动 mysql 即可。

image-20180704104726142

注意 这里在配置 my.cnf 的时候需要特别注意两点

  • 假如新建 /etc/my.cnf 作为配置文件,需要将文件 mode 设置为644,否则启动会不成功或者配置被忽略

    1
    $ sudo chmod 644 /etc/my.cnf
  • 只需要设置 character-set-server 和 collation-server 两个选项,并不存在 character_set_database 和 collation_database 选项。原因是 server 级别的选项已经涵盖了 database 级别的设置。如果你需要单独设置某个 database 的编码,在输入 create table SQL语句时单独指定即可,详见 这里

连接编码

除了存储编码,我们每次通过 client 连接到 MySQL server(如 mysql client 或者PHP 脚本等)时,还需要设置该连接的交互字符集为 utf8,执行以下语句

1
mysql> SET NAMES 'utf8';

参考文档

MySQL 官网

Configuring Application Character Set and Collation