MySQL简介

MySQL最早是由瑞典的MySQL AB公司开发的一个开放源码的关系数据库管理系统,该公司于2008年被昇阳微系统公司(Sun Microsystems)收购。在2009年,甲骨文公司(Oracle)收购昇阳微系统公司,因此在这之后MySQL成为了Oracle旗下产品。

MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用于中小型网站开发。随着MySQL的不断成熟,它也逐渐被应用于更多大规模网站和应用,比如维基百科、谷歌(Google)、脸书(Facebook)、淘宝网等网站都使用了MySQL来提供数据持久化服务。

甲骨文公司收购后昇阳微系统公司,大幅调涨MySQL商业版的售价,且甲骨文公司不再支持另一个自由软件项目OpenSolaris的发展,因此导致自由软件社区对于Oracle是否还会持续支持MySQL社区版(MySQL的各个发行版本中唯一免费的版本)有所担忧,MySQL的创始人麦克尔·维德纽斯以MySQL为基础,成立分支计划MariaDB(以他女儿的名字命名的数据库)。有许多原来使用MySQL数据库的公司(例如:维基百科)已经陆续完成了从MySQL数据库到MariaDB数据库的迁移。

  1. 安装和配置

    说明:下面的安装和配置都是以CentOS Linux环境为例,如果需要在其他系统下安装MySQL,读者可以自行在网络上查找对应的安装教程)。

    • 刚才说过,MySQL有一个分支版本名叫MariaDB,该数据库旨在继续保持MySQL数据库在GNU GPL下开源。如果要使用MariaDB作为MySQL的替代品,可以使用下面的命令进行安装。

      1. yum install mariadb mariadb-server
    • 如果要安装官方版本的MySQL,可以在MySQL官方网站下载安装文件。首先在下载页面中选择平台和版本,然后找到对应的下载链接。下面以MySQL 5.7.26版本和Red Hat Enterprise Linux为例,直接下载包含所有安装文件的归档文件,解归档之后通过包管理工具进行安装。

      1. wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
      2. tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar

      如果系统上有MariaDB相关的文件,需要先移除MariaDB相关的文件。

      1. yum list installed | grep mariadb | awk '{print $1}' | xargs yum erase -y

      接下来可以按照如下所示的顺序用RPM(Redhat Package Manager)工具安装MySQL。

      1. rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
      2. rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
      3. rpm -ivh mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm
      4. rpm -ivh mysql-community-devel-5.7.26-1.el7.x86_64.rpm
      5. rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
      6. rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm

      可以使用下面的命令查看已经安装的MySQL相关的包。

      1. rpm -qa | grep mysql
    • 配置MySQL。

      MySQL的配置文件在/etc目录下,名为my.cnf,默认的配置文件内容如下所示。如果对这个文件不理解并没有关系,什么时候用到这个配置文件什么时候再了解它就行了。

      1. cat /etc/my.cnf
      1. # For advice on how to change settings please see
      2. # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
      3. [mysqld]
      4. #
      5. # Remove leading # and set to the amount of RAM for the most important data
      6. # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
      7. # innodb_buffer_pool_size = 128M
      8. #
      9. # Remove leading # to turn on a very important data integrity option: logging
      10. # changes to the binary log between backups.
      11. # log_bin
      12. #
      13. # Remove leading # to set options mainly useful for reporting servers.
      14. # The server defaults are faster for transactions and fast SELECTs.
      15. # Adjust sizes as needed, experiment to find the optimal values.
      16. # join_buffer_size = 128M
      17. # sort_buffer_size = 2M
      18. # read_rnd_buffer_size = 2M
      19. datadir=/var/lib/mysql
      20. socket=/var/lib/mysql/mysql.sock
      21. # Disabling symbolic-links is recommended to prevent assorted security risks
      22. symbolic-links=0
      23. log-error=/var/log/mysqld.log
      24. pid-file=/var/run/mysqld/mysqld.pid
    • 启动MySQL服务。

      可以使用下面的命令来启动MySQL。

      1. service mysqld start

      在CentOS 7中,更推荐使用下面的命令来启动MySQL。

      1. systemctl start mysqld

      启动MySQL成功后,可以通过下面的命令来检查网络端口使用情况,MySQL默认使用3306端口。

      1. netstat -ntlp | grep mysql

      也可以使用下面的命令查找是否有名为mysqld的进程。

      1. pgrep mysqld
    • 使用MySQL客户端工具连接服务器。

      命令行工具:

      1. mysql -u root -p

      说明:启动客户端时,-u参数用来指定用户名,MySQL默认的超级管理账号为root-p表示要输入密码(用户口令);如果连接的是其他主机而非本机,可以用-h来指定连接主机的主机名或IP地址。

      如果是首次安装MySQL,可以使用下面的命令来找到默认的初始密码。

      1. cat /var/log/mysqld.log | grep password

      上面的命令会查看MySQL的日志带有password的行,在显示的结果中root@localhost:后面的部分就是默认设置的初始密码。

      修改超级管理员(root)的访问口令为123456

      1. set global validate_password_policy=0;
      2. set global validate_password_length=6;
      3. alter user 'root'@'localhost' identified by '123456';

      说明:MySQL较新的版本默认不允许使用弱口令作为用户口令,所以我们通过上面的前两条命令修改了验证用户口令的策略和口令的长度。事实上我们不应该使用弱口令,因为存在用户口令被暴力破解的风险。近年来,攻击数据库窃取数据和劫持数据库勒索比特币的事件屡见不鲜,要避免这些潜在的风险,最为重要的一点是不要让数据库服务器暴露在公网上(最好的做法是将数据库置于内网,至少要做到不向公网开放数据库服务器的访问端口),另外要保管好root账号的口令,应用系统需要访问数据库时,通常不使用root账号进行访问,而是创建其他拥有适当权限的账号来访问。

      再次使用客户端工具连接MySQL服务器时,就可以使用新设置的口令了。在实际开发中,为了方便用户操作,可以选择图形化的客户端工具来连接MySQL服务器,包括:

      • MySQL Workbench(官方提供的工具)
      • Navicat for MySQL(界面简单,功能直观)
      • SQLyog for MySQL(强大的MySQL数据库管理员工具)
  2. 常用命令。

    • 查看服务器版本。

      1. select version();
    • 查看所有数据库。

      1. show databases;
    • 切换到指定数据库。

      1. use mysql;
    • 查看数据库下所有表。

      1. show tables;
    • 获取帮助。

      1. ? contents;
      2. ? functions;
      3. ? numeric functions;
      4. ? round;
      5. ? data types;
      6. ? longblob;