msyql是一个开源的关系型数据库系统,非常快、可靠、可扩展且易于使用。

一、mysql基础-安装

安装方式:

1.源码安装

2.二进制文件安装

3.yum安装或自定制rpm安装

下载地址:

https://dev.mysql.com/downloads/   下载需要的版本和安装方式。

验证方式:

[root@php-140 ~]# md5sum mysql-standard-5.6.45-linux-i686.tar.gz
aaab65abbec64d5e907dcd41b8699945  mysql-standard-5.6.45-linux-i686.tar.gz

[root@php-140 ~]# md5.exe mysql-installer-community-5.6.45.msi
aaab65abbec64d5e907dcd41b8699945  mysql-installer-community-5.6.45.msi

安装步骤:

1.准备工作,安装依赖包、创建用户

[root@php-140 mysql]# yum install libaio libaio-devel numactl  -y
[root@php-140 mysql]#  useradd -s /sbin/nologin mysql -M

2.安装mysql

[root@php-140 ~]# tar xf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@php-140 local]# ln -s mysql-5.6.40-linux-glibc2.12-x86_64/ mysql
[root@php-140 local]# chown -R mysql.mysql mysql/

3.安装完mysql后,二进制和源码安装的需要初始化数据目录(系统表)

[root@php-140 mysql]# ./scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --user=mysql

注:需要重新创建权限表,首先停止mysqld服务器,将/usr/local/mysql/data/mysql改名,然后执行mysql_install_db

4.启动mysqld,mysqld_safe是启动mysql的推荐方法,包含了安全功能,例如在启动时发生错误会记录到错误日志中;

执行mysqld_safe时会执行mysqld二进制文件。选项有:

--basedir
mysql安装目录路径
--datadir
数据目录路径
--defaults-extra-file
除常用选项文件外,还需要读取的选项文件
--defaults-file
仅使用给定的选项文件
--log-error
错误日志写入到文件
--no-defaults
不读取任何选项文件,必须是第一个参数
--pid-file
mysqld使用的PID文件路径
--port
侦听TCP/IP连接服务器应使用的端口号
--socket
监听本地连接服务器应使用的套接字文件
--user
使用特定的user来运行mysqld服务器
[root@localhost mysql]# ./bin/mysqld_safe --user=mysql &
[1] 11631
190306 22:34:54 mysqld_safe Logging to '/usr/local/mysql/data/localhost.localdomain.err'.
190306 22:34:54 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
[root@localhost mysql]# ps aux | grep mysql
root     11631  0.0  0.1 106208  1552   pts/1    S    22:34   0:00 /bin/sh ./bin/mysqld_safe --user=mysql
mysql    11725  3.2 44.5 1340840 453268 pts/1    Sl   22:34   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=localhost.localdomain.err --pid-file=localhost.localdomain.pid
root     11748  0.0  0.0 103268   892   pts/1    S+   22:35   0:00 grep mysql

5.安装完成后,MySQL中的默认用户有root@localhost(无密码),匿名@localhost(无密码),如下:

mysql> select user,host,password from mysql.user;
+------+-----------+----------+
| user | host      | password |
+------+-----------+----------+
| root | localhost |          |#默认主机名localhost
| root | php-140   |          |#root+php-140
| root | 127.0.0.1 |          |#IPv4 ip地址
| root | ::1       |          |#IPv6 ip地址
|      | localhost |          |#匿名+localhost
|      | php-140   |          |#匿名+主机名php-140
+------+-----------+----------+
6 rows in set (0.05 sec)

问题:不安全!

解决方法:设置密码或删除用户。

1.为root设置密码,方法有三种set password、update、mysqladmin命令行客户端
第一种set password命令
mysql> set password for 'root'@'localhost' = password('123456');
Query OK, 0 rows affected (0.02 sec)

mysql> set password for 'root'@'php-140' = password('123456');
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | php-140   | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 |                                           |
| root | ::1       |                                           |
|      | localhost |                                           |
|      | php-140   |                                           |
+------+-----------+-------------------------------------------+
6 rows in set (0.00 sec)

第二种update
mysql> update mysql.user set password=password('123456') where user='root';
Query OK, 2 rows affected (0.02 sec)
Rows matched: 4  Changed: 2  Warnings: 0

mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | php-140   | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | ::1       | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|      | localhost |                                           |
|      | php-140   |                                           |
+------+-----------+-------------------------------------------+
6 rows in set (0.00 sec)

第三种mysqladmin
mysql -u -p shutdown更改root密码

删除匿名用户

mysql> drop user ''@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> drop user ''@'php-140';
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | php-140   | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | ::1       | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

删除测试库test

mysql> drop database test;
Query OK, 0 rows affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

6.自启动和关闭mysql

启动mysqld的方法:直接调用mysqld、mysqld_safe、mysql.server三种方式。

脚本 选项组
mysqld [mysqld], [server], [mysqld-major_version]
mysqld_safe [mysqld], [server], [mysqld_safe]
mysql.server [mysqld], [mysql.server],[server]

mysql_safe会调用mysqld二进制文件,而mysql.server会调用mysql_safe脚本

image.png

问题汇总:

1.主机名解析问题host name resolving will not work

[root@php-140 mysql]# ./scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --user=mysql
WARNING: The host 'php-140' could not be looked up with /usr/local/mysql/bin/resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MySQL version. The MySQL daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MySQL privileges !

解决方法:在/etc/hosts中增加主机名解析

[root@php-140 mysql]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.146.140 php-140

2.libaio.so.1: cannot open shared object file: No such file or directory

[root@php-140 mysql]# ./scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --user=mysql
Installing MySQL system tables.../usr/local/mysql//bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

解决方法:

[root@php-140 mysql]# yum install libaio libaio-devel  -y

3.libnuma.so.1: cannot open shared object file: No such file or directory

[root@php-140 mysql]# ./scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --user=mysql
Installing MySQL system tables.../usr/local/mysql//bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory

解决方法:

[root@php-140 mysql]# yum install libnuma.so.1  numactl -y


[root@php-140 bin]# PATH="/usr/local/mysql/bin:$PATH" #临时更改
[root@php-140 bin]# vim /etc/profile                        #永久更改
export PATH=/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@php-140 bin]# which mysql
/usr/local/mysql/bin/mysql

[root@php-140 support-files]# cp mysql.server /etc/init.d/mysqld
[root@php-140 support-files]# chmod +x /etc/init.d/mysqld
[root@php-140 ~]# /etc/init.d/mysqld restart
Shutting down MySQL..190222 10:08:20 mysqld_safe mysqld from pid file /usr/local/mysql/data/WebA-136.pid ended
 SUCCESS!
Starting MySQL. SUCCESS!
[1]+  Done                    ./mysqld_safe  (wd: /usr/local/mysql/bin)
(wd now: /usr/local/mysql/support-files)
[root@php-140 ~]#

mysql基础-程序

mysql安装中有许多的程序:

1.mysqld

SQL守护程序即mysql server,如果我们使用客户端程序,mysqld必须启动,因为客户端通过连接服务器来访问数据库。

mysqld是完成mysql安装中大部分工作的主程序,mysql server管理对包含数据库和表的mysql数据目录的访问,当mysql启动时,它会侦听来自客户端程序的网络连接,并代表这些客户端管理对数据库的访问。

mysqld有许多命令选项和系统变量,如下:使用--help --verbose输出mysqld查找哪些文件以及识别哪些选项组,输出内容截取最开始。

[root@php-140 mysql]# ./bin/mysqld --verbose --help|more
2019-03-08 01:09:45 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled
2019-03-08 01:09:45 0 [Note] ./bin/mysqld (mysqld 5.6.40) starting as process 28795 ...
2019-03-08 01:09:45 28795 [Note] Plugin 'FEDERATED' is disabled.
./bin/mysqld  Ver 5.6.40 for linux-glibc2.12 on x86_64 (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.

Starts the MySQL database server.

Usage: ./bin/mysqld [OPTIONS]

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
The following groups are read: mysqld server mysqld-5.6
The following options may be given as the first argument:

注:如果选项组名称与程序名称相同,则组中的选项将专门应用于该程序。例如, [mysqld]和[mysql]组分别应用于mysqld服务器和 mysql客户端程序。

查看服务器正在运行时的系统变量值,命令如下:

mysql> show variables;

使用show status查看正在运行的服务器的某些统计和状态指示器

mysql> show status;
+-----------------------------------------------+-------------+
| Variable_name                 | Value |
+-----------------------------------------------+-------------+
| Aborted_clients                | 0     |
| Aborted_connects                | 0     |
| Binlog_cache_disk_use             | 0     |
| Binlog_cache_use                | 0     |
| Binlog_stmt_cache_disk_use           | 0     |
| Binlog_stmt_cache_use              | 0     |
| Bytes_received                 | 248   |
| Bytes_sent                    | 14924 |

服务器配置默认值:

mysql服务器有许多默认配置项,可以通过配置文件或者命令行在启动时修改这些默认值,


2.mysqld_safe,服务器启动脚本,mysqld_safe尝试启动mysqld可执行文件。在unix中推荐的启动mysql的方法,mysqld_safe添加了一些安全性能,如发生错误时会重新启动服务器并将运行时的信息记录到错误日志中。mysqld_safe有许多选项与mysqld相似,选项地址是https://dev.mysql.com/doc/refman/8.0/en/server-options.html。常用选项:

--basedir mysql安装目录路径、--datadir 数据目录路径、--log-error错误日志目录路径 、--pid-file进程pid文件目录名称 、--port侦听TCP/IP连接时服务器应使用的端口号 、--socket监听本地连接时服务器应使用的Unix套接字文件、--user以具有名称或数字用户ID的用户身份运行mysqld服务器 等等。

3.mysql.server,服务器启动脚本,它是使用mysqld_safe来启动mysql。若要自启动或停止,需要使用将脚本放入/etc/init.d/下。使用chkconfig --add 并设置自启动。

3.mysql_multi,管理多个mysql服务器

4.mysqladmin,执行管理操作的客户端,例如创建或删除数据库,重新加载授权表,将表刷新到磁盘以及重新打开日志文件。 mysqladmin还可用于从服务器检索版本,进程和状态信息。

5.mysqldump,将MySQL数据库作为SQL,文本或XML转储到文件中的客户端。

6.mysqlshow,显示有关数据库,表,列和索引的信息的客户端,重要*****,https://dev.mysql.com/doc/refman/8.0/en/mysqlshow.html

7.mysqlbinlog,用于从二进制日志中读取语句的实用程序。二进制日志文件中包含的已执行语句的日志可用于帮助从崩溃中恢复。重要*****,https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog.html

8.mysqldumpslow

9.mysql_config,用于读取和汇总慢查询日志内容的实用程序。重要***

10.mysql_install_db--初始化数据库数据目录,目的是为了初始化数据库的数据目录,以及创建它包含的系统表(如果他们不存在),也会创建在mysql安装目录中my.cnf,若已经存在则会创建my-new.cnf配置文件。

语法:

shell> mysql_install_db [options]

示例:

[root@php-140 support-files]# ./mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data  --user=mysql