安装 MySQL

完全没想到安装 mysql 会消耗掉将近一天的时间。从上午十一点,没吃饭没睡觉一直折腾到下午四点半,网上已经有了很详细的安装指导,却依旧卡在某个问题上两三个小时。文中会详细叙述。

我们可以在不同的平台以“不同的姿势”搭建 mysql 环境。

Debian 安装 MySQL

通过 官方指导手册 的章节标题我们就能感受到“姿势”的多种多样了。因为我使用的 Debian8,其官方软件库中 mysql-server-5.5,所以在此贴的链接也是 5.5 版本的。

  • Installing MySQL from Source

如果你有管理员权限,很明显使用 Debian 原生的 apt-get 包管理器进行安装是最方便的。我也是敲入以下命令直接装的:

1
2
apt-get update
apt-get install mysql-client-5.5 mysql-server-5.5

关于 mysql-server 和 mysql-client 的区别:

来一段引用或者 链接

打算使用 windows 上的 Navicat 访问、管理数据库的。但是在虚拟机使用 NAT 模式前提下,windows 主机无法访问安装在 Debian 虚拟机中的 mysql 数据库。从网上查找资料了解到,修改为“Bridge”模式可以让宿主机、虚拟机彼此访问,但是涉及笔记本双网卡、气象局网络环境等,还要了解虚拟机三种网络模式,不想背离初衷(上午十点我只是打算写段访问数据库的 C++11 代码)太远,所以选择放弃!以后碰到了,再回来接续这些技能。

在 Debian8Light 上卸载 mysql-server-5.5,保留了 mysql-client-5.5。

Windows7 安装 MySQL

windows 下是“姿势”多多。既然是在 windos 上安装,就使用最新的 5.7 版本了。

使用 MySQL Installer 安装包安装很简单,需要花费精力的是“尽可能的安装最小集,只安装那些你需要的”。对于这次的使用场景来说,我是练习写 C++ 代码用,而且已经有了 Navicat 工具。所以,我只需要安装 MySQL Server 和开发时所用的 Connector,其他的任何 GUI 工具和 Java、Python 连接器我都不需要。

MySQL 自定义安装

剔除那些根本就不会用到的功能花费了一些时间,除此之外,整个安装过程很顺利,装完之后连接成功直接使用。

在好奇心和心理洁癖的驱使下,我尝试搭建了 解压版 MySQL。就是在这个过程中遇到了意外,花费了两个小时才解决。

解压版本重点在于配置,根据网上的示范(5.5版本、5.6版本)搭建完毕,可是启动服务时老是失败,报错“本地计算机上的mysql服务启动后停止,……”。我当时脑袋也是不清醒,下意识地以为是配置文件的问题,或者是一台电脑安装两个实例带来的冲突。配置文件,我是把安装版的 my.ini 稍作修改直接拿过来用的,担心漏掉了某条配置没有改,造成冲突。可是校对之后仍没能解决问题;然后将安装版本卸载之后,还是出现这个错误,才反应过来直接 Google 这句错误信息。网上搜到的信息不多,但很有效。

这是一个在 5.7.7 版本之后才有的现象,新的版本需要 Initializing the Data Directory。如果英文水平不高,可以直接参考 MySQL 5.7.9 ZIP 免安装版本配置过程

而现在 2016/7/16 18:56:44 ,我要开始码代码了。

配置文件

在 windows 上安装 msi 版本后,查看在其 /Data/ 目录下的 my.ini 配置文件。

整个配置文件分为两部分: Client Section 和 Server Section。强调 mysql 和 mysqld 是不同的两个功能,尤其是用 mysql、mysqladmin等客户端工具连接数据库时(默认)使用 Client Section 区域的 port,mysqld 启动数据库服务时监听 Server Section 区域的 port 指定的端口。仔细阅读配置文件中的注释!

权限管理

很很重要的一部分!但目前没有深入了解的必要,参考 MySQL 数据库赋予用户权限操作表 只学习以下几点:

  • 查看权限:查看自己的权限,查看其他用户的权限

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    mysql> show grants for dba;
    1141 - There is no such grant defined for user 'dba' on host '%'
    mysql> show grants for dba@localhost;
    +---------------------------------------------------------------------------+
    | Grants for dba@localhost |
    +---------------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'dba'@'localhost' |
    | GRANT ALL PRIVILEGES ON `testdb`.* TO 'dba'@'localhost' WITH GRANT OPTION |
    +---------------------------------------------------------------------------+
    2 rows in set

    mysql> show grants for developer;
    1141 - There is no such grant defined for user 'developer' on host '%'
    mysql> show grants for developer@'192.168.195.%';
    +-----------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Grants for developer@192.168.195.% |
    +-----------------------------------------------------------------------------------------------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'developer'@'192.168.195.%' |
    | GRANT CREATE, DROP, REFERENCES, INDEX, ALTER, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE ON `testdb`.* TO 'developer'@'192.168.195.%' |
    +-----------------------------------------------------------------------------------------------------------------------------------------------------------+
    2 rows in set

    mysql> show grants for common_user;
    +-------------------------------------------------------------------------+
    | Grants for common_user@% |
    +-------------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'common_user'@'%' |
    | GRANT SELECT, INSERT, UPDATE, DELETE ON `testdb`.* TO 'common_user'@'%' |
    +-------------------------------------------------------------------------+
    2 rows in set

    mysql>
  • GRANT语句的主要用途是来给帐户授权的,但也可用来建立新帐户并同时授权。

    创建 testdb 数据库,在其基础上创建 common_user developer dba 用户并授权

    1
    GRANT SELECT, INSERT, UPDATE, DELETE ON `testdb`.* TO 'common_user'@'%' IDENTIFIED BY 'common_user';

参考 MySQL之权限管理 了解更多的,记得去官网哦。

jack@’localhost’ 表示jack用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。

WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。

编写代码

MySQL Connector/C++ Developer Guide

在 C++ 中使用 MySQL 数据库,包含上述方法在内一共有 3 种:

  1. 使用 Connector/C++,库文件命名 (lib)mysqlcppconn.xx
  2. 使用 Connector/ODBC
  3. 使用 Connector/C,库文件命名 libmysql.xx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
文件夹 PATH 列表
卷序列号为 CC94-9350
C:.
├─Connector.C++ 1.1
│ ├─include
│ │ └─cppconn
│ └─lib
│ └─opt
├─Connector.ODBC 5.3
└─MySQL Connector.C 6.1
├─bin
├─include
│ └─mysql
│ └─psi
└─lib
├─vs10
├─vs11
└─vs12