【MySQL基础】01:安装、目录结构、启动停止、修改密码

     本教程以MySQL8为主版本(兼容MySQL5.7)。

     所有MySQL文章的目录为:总目录    【MySQL8教程】:总目录_zyplanke的专栏-CSDN博客     

     MySQL安装可分为:RPM安装、通用二进制安装、源代码安装。本文先介绍了基于RPM安装MySQL(简单易学,适合初学者),然后介绍了二进制安装(推荐)。 本文以MySQL 8.0.18为例,详细说明在Linux上采用RPM方式安装的过程。

       本文的安装方法和命令无特别说明则适用于RHEL / Oracle Linux / CentOS。其他 如SLES / Fedora也可参考 。更多系统和其他安装方式,请参考官方文档:MySQL :: MySQL 8.0 Reference Manual

目录

1、安装前准备

2、RPM方式安装

2.1、Rpm Packages列表

2.2、安装RPM(使用root用户)

2.3、RPM安装后目录结构

2.4、字符集设置

2.5、启动MySQL

2.6、首次使用MySQL服务

3、二进制Generic Binaries方式安装

3.1、安装前环境检查

3.2、二进制方式安装(使用root用户)

3.3、二进制安装后目录结构

4、首次登陆修改密码


1、安装前准备

  • OS:CentOS 7.7  x86_64  (1908版) 
  • MySQL:社区版 8.0.18 x86_64 介质 

           RPM包下载地址:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar

           二进制包下载地址(根据自己Linux上的glibc版本选择):https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz

2、RPM方式安装

RPM安装与二进制安装两选一即可,不要在同一台机器两种方式都安装,避免冲突。

2.1、Rpm Packages列表

MySQL 8 社区版(Community Edition)的RPM软件包(来源自官方文档)

RPM包名字摘要
mysql-community-clientMySQL客户端应用程序和工具
mysql-community-common服务器和客户端库的通用文件
mysql-community-develMySQL数据库客户端应用程序的开发头文件和库
mysql-community-embedded-compatMySQL服务器作为嵌入式库,与使用库版本18的应用程序兼容
mysql-community-libsMySQL数据库客户端应用程序的共享库
mysql-community-libs-compat以前的MySQL安装的共享兼容性库
mysql-community-server数据库服务器和相关工具
mysql-community-server-debug调试服务器和插件二进制文件
mysql-community-testMySQL服务器的测试套件
mysql-communityRPM的源代码,名字类似于mysql-community-8.0.20-1.el7.src.rpm,具体取决于所选的OS

如果是MySQL 8 企业版(Enterprise Edition), 则RPM软件包为:

RPM包名字摘要
mysql-commercial-backupMySQL企业备份(8.0.11中添加)
mysql-commercial-clientMySQL客户端应用程序和工具
mysql-commercial-common服务器和客户端库的通用文件
mysql-commercial-develMySQL数据库客户端应用程序的开发头文件和库
mysql-commercial-embedded-compatMySQL服务器作为嵌入式库,与使用库版本18的应用程序兼容
mysql-commercial-libsMySQL数据库客户端应用程序的共享库
mysql-commercial-libs-compat以前的MySQL安装的共享兼容性库;库的版本与您使用的发行版默认安装的库的版本匹配
mysql-commercial-server数据库服务器和相关工具
mysql-commercial-testMySQL服务器的测试套件

2.2、安装RPM(使用root用户)

  1. MySQL需要依赖libaio、net-tools、perl等软件,确保已将这些软件安装就绪,可以通过rpm -aq 查询操作系统当前已经安装的软件。
  2. 本节步骤需使用root用户,或者具有sudo权限的用户(在命令前加sudo执行)
  3. 将下载的MySQL安装介质mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar 放到某个目录,本文放到 /tmp/mysql_install_pkgs 目录下。然后解压
    # cd /tmp/mysql8_rpm_packages
    # tar -xvf mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar

  4. 在大多数情况下,只需要安装 mysql-community-server, mysql-community-client, mysql-community-libs, mysql-community-common,和 mysql-community-libs-compat包, 作为标准的MySQL安装。
  5. 通过以下命令安装
    # rpm -ivh mysql-community-{server,client,common,libs}*

如果报:libaio、net-tools、perl这些依赖包,则先按照这些对应的包。可以先下载,再用rpm安装这些依赖包。如果Linux能联网还可以直接通过命令yum install 进行安装。

如果报error: Failed dependencies  mariadb-server is obsoleted by mysql-community-server..... 等等之类的错误。是因为系统已有的mariadb与MySQL冲突,通过以下命令删除冲突的mariadb包,然后再用上步命令执行。

# rpm -qa |grep mariadb |xargs rpm -e --nodeps
# rpm -qa |grep mysql |xargs rpm -e --nodeps

2.3、RPM安装后目录结构

标准安装后的文件位置 MySQL Installation Layout for Linux RPM Packages

Files or ResourcesLocation
Client programs and scripts/usr/bin
mysqld server/usr/sbin
Configuration file/etc/my.cnf
Data directory/var/lib/mysql
Error log file

For RHEL, Oracle Linux, CentOS or Fedora platforms: /var/log/mysqld.log

For SLES: /var/log/mysql/mysqld.log

Value of secure_file_priv/var/lib/mysql-files
System V init script

For RHEL, Oracle Linux, CentOS or Fedora platforms: /etc/init.d/mysqld

For SLES: /etc/init.d/mysql

Systemd service

For RHEL, Oracle Linux, CentOS or Fedora platforms: mysqld

For SLES: mysql

Pid file/var/run/mysql/mysqld.pid
Socket/var/lib/mysql/mysql.sock
Keyring directory/var/lib/mysql-keyring
Unix manual pages/usr/share/man
Include (header) files/usr/include/mysql
Libraries/usr/lib/mysql
Miscellaneous support files (for example, error messages, and character set files)/usr/share/mysql

提醒:RPM安装时会自动在系统上创建一个名为的用户 mysql和一个名为的组 mysql。(因为仅出于文件和进程所有者目的,而不是登录用途才创建该用户,所以该用户没有登录权限

2.4、字符集设置

对于MySQL8 默认字符集已经是utf8mb4,所以无需再设置字符集。

对于MySQL 5.7或更低版本 :

         因为默认server端的字符集(character)为:latin1。为兼容中文,强烈建议在启动数据库前,先修改server端的字符集为utf8mb4。打开MySQL server端的配置文件/etc/my.cnf。在[mysqld]和[client]下面各增加一行。  (如果没有[client]  这一行, 则手工增加, client配置包括mysql客户端的所有客户端)然后保存:

[mysqld]
character-set-server=utf8mb4
...
...

[client]
default-character-set=utf8mb4
...
...

题外话:由于MySQL的历史遗留问题,MySQL历史版本中的utf8等于utf8mb3,不是utf8mb4,所以在MySQL中需要具体指定为utf8mb4。 两者一般情况下中英文都没有问题,但utf8mb4可以比utf8mb3多存放 Emoji 表情(Emoji常见于手机等移动终端)和很多不常用的汉字。而且MySQL8.0默认字符集就是utf8mb4则无须特别设置。  同时注意一点,许多人一直认为utf8字符集的汉字是固定占3个字节。虽然大多数情况是对的,但也有占用4个字节的情况!!!

2.5、启动MySQL

在安装过程结束时,不会自动启动MySQL。

本节步骤需使用root用户,或者具有sudo权限的用户(在命令前加sudo执行)

  • 对于Red Hat Enterprise Linux,Oracle Linux,CentOS和Fedora系统,使用以下命令来启动MySQL
# service mysqld start
  • 对于SLES系统,命令相同,但是服务名称不同:
# service mysql start
  • 启动后,通过ps命令可以看到当前mysqld进程信息。而且可以看到尽管是用root启动,但进程的所属用户为mysql。mysql使用的文件的文件属主也是mysql用户。
    [root@centosa ~]#  ps -ef | grep mysqld
    mysql      2570      1  2 11:45 ?        00:00:01 /usr/sbin/mysqld
    root       2745   2691  0 11:46 pts/0    00:00:00 grep --color=auto mysqld
    
    
    [root@centosa ~]# ls -l /var/lib/mysql
    total 168004
    -rw-r-----. 1 mysql mysql       56 Dec 17 11:45 auto.cnf
    -rw-r-----. 1 mysql mysql      155 Dec 17 11:45 binlog.000001
    -rw-r-----. 1 mysql mysql       16 Dec 17 11:45 binlog.index
    -rw-------. 1 mysql mysql     1676 Dec 17 11:45 ca-key.pem
    -rw-r--r--. 1 mysql mysql     1112 Dec 17 11:45 ca.pem
    -rw-r--r--. 1 mysql mysql     1112 Dec 17 11:45 client-cert.pem
    -rw-------. 1 mysql mysql     1680 Dec 17 11:45 client-key.pem
    -rw-r-----. 1 mysql mysql     5892 Dec 17 11:45 ib_buffer_pool
    -rw-r-----. 1 mysql mysql 12582912 Dec 17 11:45 ibdata1
    -rw-r-----. 1 mysql mysql 50331648 Dec 17 11:45 ib_logfile0
    -rw-r-----. 1 mysql mysql 50331648 Dec 17 11:45 ib_logfile1
    -rw-r-----. 1 mysql mysql 12582912 Dec 17 11:45 ibtmp1
    drwxr-x---. 2 mysql mysql      187 Dec 17 11:45 #innodb_temp
    drwxr-x---. 2 mysql mysql      143 Dec 17 11:45 mysql
    -rw-r-----. 1 mysql mysql 25165824 Dec 17 11:45 mysql.ibd
    srwxrwxrwx. 1 mysql mysql        0 Dec 17 11:45 mysql.sock
    -rw-------. 1 mysql mysql        5 Dec 17 11:45 mysql.sock.lock
    drwxr-x---. 2 mysql mysql     8192 Dec 17 11:45 performance_schema
    -rw-------. 1 mysql mysql     1680 Dec 17 11:45 private_key.pem
    -rw-r--r--. 1 mysql mysql      452 Dec 17 11:45 public_key.pem
    -rw-r--r--. 1 mysql mysql     1112 Dec 17 11:45 server-cert.pem
    -rw-------. 1 mysql mysql     1680 Dec 17 11:45 server-key.pem
    drwxr-x---. 2 mysql mysql       28 Dec 17 11:45 sys
    -rw-r-----. 1 mysql mysql 10485760 Dec 17 11:45 undo_001
    -rw-r-----. 1 mysql mysql 10485760 Dec 17 11:45 undo_002

    可使用操作系统 service命令(例如 stopstart, statusrestart)来管理MySQL服务器服务。例如:

    [root@centosa ~]# service mysqld stop
    Redirecting to /bin/systemctl stop mysqld.service   #对于CentOS,实际是使用systemctl
    
    [root@centosa ~]# service mysqld start
    Redirecting to /bin/systemctl start mysqld.service

    注意:该 mysqld服务默认情况下会随着操作系统启动而自动启动,并在系统重新启动时启动(对于CentOS,可通过systemctl 命令enable和disable来设置)。

2.6、首次使用MySQL服务

在启动mysql服务时,如果MySQL的data目录为空(例MySQL首次启动时,或者人为删除后),则会进行:

  • MySQL服务完成初始化。
  • SSL证书、密钥文件、初始的数据库及文件在data目录中生成(目录位置见上表)。
  • validate_password 已安装并启用。
  • 'root'@'localhost'创建 一个超级用户帐户。自动生成该用户的密码,并将其存储在错误日志文件中(若没有配置log_error参数,则在初始化时输出到屏幕)。

-------- 至此,RPM安装结束 ----------

3、二进制Generic Binaries方式安装

二进制(Generic Binaries)安装与RPM包两选一即可,不要在同一台机器两种方式都安装,避免冲突。

    通用二进制方式安装,相比RPM方式安装具有更大得灵活性,但又不像源代码安装那样复杂费时。二进制安装是将MySQL官方已经编译完成的二进制结果安装在本地操作系统上,安装过程非常简单方便。由于RPM固定了安装后的目录,一般一台机器上只能安装一套MySQL。 二进制安装目录灵活(可以任意路径),一台机器上可以安装多套MySQL软件。

3.1、安装前环境检查

   1、确保 MySQL需要依赖libaio软件(net-tools、perl似乎可以不用),确保已将这些软件安装就绪,可以通过rpm -aq 查询操作系统当前已经安装的软件。

   2、如果机器上之前通过RPM、Yum或者APT方式安装过MySQL(或者MySQL的变种版本mariadb),则在二进制方式安装前,需要先停止,然后将之前软件彻底删除。 使用root用户,删除软件的命令格式,可参考如下:

# rpm -qa |grep mariadb |xargs rpm -e --nodeps
# rpm -qa |grep mysql |xargs rpm -e --nodeps

还需要将之前数据库的数据目录(可能为/var/lib/mysql)、配置文件(通常为/etc/my.cnf或者/etc/mysql)全部删除。 使用root用户,删除软件的命令格式,可参考如下:

# rm -rf /var/lib/mysql*
# rm -rf /etc/my.cnf*
# rm -rf /etc/mysql

3.2、二进制方式安装(使用root用户)

  1. 增加操作系统的组和用户:
    # groupadd mysql
    # useradd -r -g mysql -s /bin/false mysql
    
    
    若需要,可把mysql用户纳入sudo组中。其中wheel为sudo组名(可通过visudo命令查看确认)
    # usermod -aG wheel mysql
  2. 根据自己Linux上的glibc版本选择对应的Generic压缩文件下载,解压二进制包,假设安装的目标路径为:/usr/local    (解压后,修改目录名或者创建软连接,这样对mysql目录的操作会更加方便)
    # cd  /usr/local
    
    # tar  xvf  mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz
    (应先通过" rpm -aq |grep glibc "命令查看本机的glibc的版本,再从MySQL官网下载对应的版本)
    (另:“minimal install” 官网说明文档为The minimal install distribution excludes debug binaries and is stripped of debug symbols, making it significantly smaller than the regular binary distribution.)
    
    
    
    # mv  mysql-8.0.18-linux-glibc2.12-x86_64  mysql
    或者
    # ln  -s  mysql-8.0.18-linux-glibc2.12-x86_64  mysql
  3. (可选步骤,可跳过)。安装目标路径为:/usr/local/mysql,我们再此目录下分别创建目录mysql-files。 然后在/etc/my.cnf文件中,增加配置“secure_file_priv”指向新建的本目录。该参数的作用为限制import和export的路径(仅允许通过该路径导入导出数据,是一个安全方面的选项)。   生产环境应配置,测试环境本步骤可忽略。 secure_file_priv:等于空表示不做任何限制;等于NULL表示不允许导入;等于目录标准仅允许指定的目录。
    # cd  /usr/local/mysql
    # mkdir mysql-files
    # chown mysql:mysql mysql-files
    # chmod 750 mysql-files
  4.  新创建MySQL配置文件/etc/my.cnf,文件的内容如下(根据实际情况修改)
    [mysqld]
    #
    # Remove leading # and set to the amount of RAM for the most important data
    # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
    # innodb_buffer_pool_size = 128M
    #
    # Remove the leading "# " to disable binary logging
    # Binary logging captures changes between backups and is enabled by
    # default. It's default setting is log_bin=binlog
    # disable_log_bin
    #
    # Remove leading # to set options mainly useful for reporting servers.
    # The server defaults are faster for transactions and fast SELECTs.
    # Adjust sizes as needed, experiment to find the optimal values.
    # join_buffer_size = 128M
    # sort_buffer_size = 2M
    # read_rnd_buffer_size = 2M
    #
    # Remove leading # to revert to previous value for default_authentication_plugin,
    # this will increase compatibility with older clients. For background, see:
    # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
    # default-authentication-plugin=mysql_native_password
    
    port=3306
    server_id=1
    innodb_flush_log_at_trx_commit=1
    sync_binlog=1
    binlog_cache_size=1M
    binlog_rows_query_log_events=ON
    datadir=/usr/local/mysql/data
    log_error=/usr/local/mysql/data/mysqld.err
    log_timestamps=system
    character-set-server=utf8mb4
    lower_case_table_names=1
    
    [mysql]
    default_character_set=utf8mb4
    
    [client]
    default_character_set=utf8mb4

  5. 初始化数据库。执行以下命令。其中,--user表示执行过程使用指定的用户运行,而不是root(虽然命令是root发起的)。 该命令会根据my.cnf配置文件,自动在当前目录下创建数据存放目录,初始数据库和系统表,并创建MySQL的用户root@localhost和随机的初始密码(因为my.cnf指定了log_error所以初始化密码输出到文件该文件中,否则直接输出到当前屏幕中)。  以下命令执行完成后,可以看到在当前目录下生产了一个“data”新目录。

    # cd  /usr/local/mysql
    # bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data
    
    
    (可选步骤,如果需要自动支持ssl安全连接,则执行以下命令创建默认的SSL和RSA文件)
    # bin/mysql_ssl_rsa_setup

  6. 启动MySQL。
    # cd  /usr/local/mysql
    # bin/mysqld_safe --user=mysql &

       停止的命令如下

    # bin/mysqladmin -u root -p shutdown
  7. (可选步骤)执行以下命令后,纳入操作系统的服务管理。
    # cd  /usr/local/mysql
    # cp support-files/mysql.server /etc/init.d/mysql.server
    然后,就可以使用service mysql.server start或者 service mysql.server stop进行启动/停止。
  8. 查看进程。可以看到有两个进程mysqld_safe和mysqld。mysqld是真正提供MySQL服务的进程,而mysqld_safe类似于watchdog的检测进程,这种方式比较安全,当mysqld进程掉了后,mysqld_safe会及时发现并拉一个新的mysqld进程。

 -------- 至此,MySQL安装结束 ----------

为了方便使用mysql客户端命令,建议将/usr/local/mysql/bin加入到需要使用该命令的用户profile的PATH环境变量中。

3.3、二进制安装后子目录结构

目录目录内容
binmysqld服务器,客户端和实用程序
docs信息格式的MySQL手册
manUnix手册页
include包含(头)文件
liblib库
share错误消息,字典和用于数据库安装的SQL
support-files杂项支持文件

还有:通常自行创建的/etc/my.cnf配置文件。

4、首次登陆修改密码

  • 获得MySQL初始化时生产的临时密码。 若指定了log_error参数,则在该文件中,若没有指定则在初始化输出在屏幕上。 对于RPM方式安装,请对RHEL,Oracle Linux,CentOS和Fedora系统使用以下命令, SLES系统的log文件路径为/var/log/mysql/mysqld.log:
    # grep 'temporary password' /var/log/mysqld.log

    如果是二进制Generic Binaries安装,则mysql的日志文件为安装目录下的mysqld.err文件(例如:/usr/local/mysql/data/mysqld.err 

  • 通过mysql客户端,用上面的临时密码连接到mysql的server,然后立即通过SQL修改该用户的密码
    shell$ mysql -uroot -p
    (输入随机生成的密码)
    
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Pwd_1234';
  • 初始数据库root用户默认只能从localhost上访问。如果希望从其他机器(客户端)访问mysql数据库,可以在mysql命令行中通过以下SQL,将允许登录的客户端host设置任意(不限制)。
    mysql> update mysql.user set host = '%' where user = 'root';
    mysql> commit;   # 这句可以省略,因为默认自动提交
    mysql> flush privileges;

       这里是修改已有root用户的host属性。还可以:新建一个root用户并把host设置不同值,以便于权限分别管理设置。

  • 然后就可以在其他机器上,使用新密码登录MySQL。然后查看当前默认的字符集:
    mysql> show variables like '%character%';
    +--------------------------+----------------------------------------------------------------+
    | Variable_name            | Value                                                          |
    +--------------------------+----------------------------------------------------------------+
    | character_set_client     | utf8mb4                                                        |
    | character_set_connection | utf8mb4                                                        |
    | character_set_database   | utf8mb4                                                        |
    | character_set_filesystem | binary                                                         |
    | character_set_results    | utf8mb4                                                        |
    | character_set_server     | utf8mb4                                                        |
    | character_set_system     | utf8                                                           |
    | character_sets_dir       | /usr/local/mysql-8.0.18-linux-glibc2.12-x86_64/share/charsets/ |
    +--------------------------+----------------------------------------------------------------+
    8 rows in set (0.01 sec)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值