Ubuntu 16.04 部署MySQL服务

0x00 前言

MySQL是一款开源的关系型数据库管理系统,大量公司都在使用它,或是在它的基础上做二次开发。有时,我们会需要在Linux系统上部署MySQL服务用于测试。

本文是根据网上的经验分享以及亲自实践的过程总结而来。实验环境为:Ubuntu 16.04 x64。

0x01 安装MySQL服务端和客户端

apt install mysql-server -y 
apt install mysql-client -y

安装mysql-server过程中会提示输入root用户密码。

查看mysql版本:

$ mysqld --version
mysqld  Ver 5.7.22-0ubuntu0.16.04.1 for Linux on x86_64 ((Ubuntu))

使用netstat -an | grep 3306命令测试服务是否安装成功:

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN 

0x02 修改配置文件

mysql默认监听的是回环地址,如果要改为监听全局地址,可以修改mysql的配置文件:/etc/mysql/mysql.conf.d/mysqld.cnf,默认配置如下:

[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1

注释掉以下行就可以监听全局地址:

#bind-address            = 127.0.0.1

以下行可以修改监听端口:

port            = 13306

修改默认编码为:utf8,在[mysqld]下新增以下行:

collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

重启mysql服务:systemctl restart mysql,确认配置生效

确认编码是否生效的方法是通过mysql -u root -p进入mysql命令行后,使用SHOW VARIABLES LIKE "character_set_server";确认。

mysql> SHOW VARIABLES LIKE "character_set_server";
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| character_set_server | utf8  |
+----------------------+-------+
1 row in set (0.01 sec)

0x03 创建用户和数据库

为了安全性,一般不使用root帐号登录,可以创建子用户登录。

使用mysql -u root -p命令进入mysql命令行,输入以下命令创建用户。

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

username:新创建的用户名
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
password:该用户的登录密码,密码可以为空,如果为空则该用户可以不需要密码登录服务器

此时,该用户还没有对应的数据库,可以使用以下命令创建:

CREATE DATABASE database character set utf8;

然后授予用户访问权限:

GRANT privileges ON database.table TO 'username'@'host'

privileges:用户的操作权限,如SELECTINSERTUPDATE等,如果要授予所的权限则使用ALL
database:数据库名
table:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如: *.*

0x04 常用操作

  • 查看当前已创建的数据库列表
    • SHOW DATABASES;
  • 查看用户列表
    • SELECT USER FROM mysql.user
  • 修改用户密码
    • SET PASSWORD for 'username'@'host' = password('password');
  • 导出.sql文件
    • mysqldump -h server -P port -u username -p database > backup.sql
  • 导入.sql文件
    • mysql -u username -p database < backup.sql
  • 获取慢查询列表
    • SELECT concat('kill ', id, ';') FROM information_schema.processlist WHERE Command != 'Sleep' AND Time > 300 ORDER BY Time DESC;

0x05 客户端访问

在服务器上一般使用mysql命令访问,在本地电脑上我一般使用MySQL-Front软件访问,全部可视化操作,非常方便。

分享