MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
安装与设置
安装MySQL8.0版本
可以直接使用apt命令安装sudo apt-get install mysql-server
但这样安装的mysql版本是5.7的,需要添加MySQL APT repository,后再安装
- 从 https://dev.mysql.com/downloads/repo/apt/ 下载mysql-apt-config_x.x.x-x_all.deb,执行如
sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb
,选择使用8.0的版本 - 更新apt源:
Update package information from the MySQL APT repository
- 安装mysql:
sudo apt-get install mysql-server
官方教程:https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/#apt-repo-setup
centos安装教程,参见:http://www.runoob.com/mysql/mysql-install.html
安装完毕后查看版本:
ulysses@ulysses:~$ mysql --version
mysql Ver 8.0.13 for Linux on x86_64 (MySQL Community Server - GPL)
登录:
ulysses@ulysses:~$ mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
输入系统root密码并不能登录,需要修改root密码。
修改root用户密码
官方在8.0的参考手册中给出了如何修改数据库root用户密码的教程:https://dev.mysql.com/doc/refman/8.0/en/resetting-permissions.html 包含windows环境或是unix/linux环境下设置。
- 登录mysql运行的系统(可以使用数据库新添加的linux系统用户
mysql
); - 停止当前运行的mysql服务:
sudo service mysql stop
或者使用kill
命令杀死进程; - 创建一个文本文件,里边写一行语句用来修改root用户的密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
8.0版本的密码安全性要求更高,需要大写字母、数字、特殊字符。
4. 若不是使用mysql登录系统,给新创建的文本添加mysql用户的读权限
5. 运行: mysqld --init-file=/home/me/mysql-init
,启动mysql
6. mysql 成功启动后删除这个文本;
这样就能使用系统用户root来登录数据库:
ulysses@ulysses:~/PycharmProjects/test_base$ sudo su
root@ulysses:/home/ulysses/PycharmProjects/test_base# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.13 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> \q
Bye
可以查看当前的用户:
mysql> select user from mysql.user;
+------------------+
| user |
+------------------+
| debian-sys-maint |
| mysql.session |
| mysql.sys |
| root |
+------------------+
4 rows in set (0.01 sec)
创建用户和数据库
创建普通的数据库用户:
mysql> create user dbuser@localhost identified by 'pasword';
ERROR 1146 (42S02): Table 'mysql.role_edges' doesn't exist
mysql> \q
Bye
root@ulysses:/home/ulysses/PycharmProjects/test_base# mysql_upgrade -u root -p
Enter password:
若出现mysql.role_edges
不存在的使用mysql_upgrade -u root -p
修复,再次创建用户:
mysql> create user dbuser@localhost identified by '***';
Query OK, 0 rows affected (0.12 sec)
这时候使用就可以使用dbuser登录数据库
root@ulysses:/home/ulysses/PycharmProjects/test_base# mysql -u dbuser -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
新用户是无法直接使用create database
创建数据库的
mysql> create database exampledb;
ERROR 1044 (42000): Access denied for user 'dbuser'@'localhost' to database 'exampledb'
需要在root用户下创建新的数据库,并将其权限赋予新用户才行:GRANT ALL ON 'dbname'.* TO 'your_mysql_name'@'your_client_host';
使用root登录mysql,并创建新的数据库:
mysql> create database ex1;
Query OK, 1 row affected (0.06 sec)
mysql> grant all privileges on ex1.* to dbuser@localhost;
Query OK, 0 rows affected (0.14 sec)
切换到dbuser用户,查看数据库
root@ulysses:/home/ulysses/PycharmProjects/test_base# mysql -u dbuser -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 41
Server version: 8.0.13 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| ex1 |
| information_schema |
+--------------------+
2 rows in set (0.00 sec)
MySQL 操作
MySQL数据库操作符合一般的sql语言。
基本sql操作
创建数据表并插入数据:
mysql> use ex1
Database changed
mysql> create table student (id int primary key, name varchar(20));
Query OK, 0 rows affected (0.35 sec)
mysql> insert into student values (1, 'ulysses'),(2, 'radier');
Query OK, 2 rows affected (0.10 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from student;
+----+---------+
| id | name |
+----+---------+
| 1 | ulysses |
| 2 | radier |
+----+---------+
2 rows in set (0.00 sec)
数据的导出
导入导出时可能有权限的问题,最好使用root用户登录进行操作,而且可以不用输入密码直接登录。
SELECT … INTO OUTFILE 导出
使用 SELECT … INTO OUTFILE 语句导出数据到文本上:
mysql> select * from student;
+----+---------+
| id | name |
+----+---------+
| 1 | ulysses |
| 2 | radier |
| 10 | jasen |