概念

  • 数据是客观事物的符号表示

    • 内存中的数据: 速度快,不能持久性保存
    • 文件中的数据,随着文件的增大,检索困难
  • 数据库(Database)

    • 按照一定数据结构存储数据的仓库
  • 数据库管理系统(DBMS)

    • 概念: 操纵和管理数据库的软件
    • 用户向DBMS发起请求,DBMS调用底层,得到结果后返回数据给用户

数据库分类

关系型数据库管理系统(RDBMS)

  • 采用关系模型管理数据 ,采用二维表格的形式来简化数据关系实现对数据的管理

  • 常见关系型数据库:

    • oracle数据库:oracle公司产品,大型分布式数据库管理系统.大型企业,金融,国企,产品免费,服务收费
    • mysql数据库:oracle公司,针对中小型系统;开源 免费(闭源风险).互联网厂商
    • mariaDB 数据库:mysql分支,社区维护5.5版本之前和mysql无区别.
    • Sql Server :Microsoft 中小型企业.只能与windsows运行
    • DB2:IBM公司,中小型企业,外企,银行

非关系型的数据库管理系统(Nosql)

  • not only sql

  • 弥补关系型数据库在高io,高可用方面的局限性

  • 非关系型数据库

    • redis
    • hbase
    • mongodb
    • neo4j(图数据库)

mysql初识

  • mysql体积小,开源免费,支持GPL(开源软许可证)协议

  • 发展过程

    • 1996年发布mysql1.0,mysql ab公司
    • 2000年 正式开源
    • 2008年被sun以10亿美元收购
    • 2009年sun被oracle以74亿美元收购
  • mysql是一个关系型的数据库管理系统

    • 采用关系模型对数据进行管理,对不同的数据采用分表的形式管理,多张表存在的情况下
    • 可以采用分库的形式进行管理
  • mysql数据库管理系统中可以管理多个数据库

  • 在一个数据库中可以存放多张表

Windows下安装

准备工作

  • 参考菜鸟教程: https://www.runoob.com/mysql/mysql-install.html

  • mysql最新版下载地址: https://dev.mysql.com/downloads/mysql/

    • 直接点击下载,将下载好的zip包解压到自己的工作目录下,例如我解压到了:D:\developers\javadeveloper\SOFT
  • 在根目录下创建 my.ini配置文件, 我的文件内容如下:

    • 其中的basedir设置修改为自己的解压目录
      • 默认的数据存放目录为根目录下的data目录,安装前请确保data目录为空,或者删除整个data文件夹
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    [client]
    # 设置mysql客户端默认字符集
    default-character-set=utf8

    [mysqld]
    # 设置3306端口
    port = 3306
    # 设置mysql的安装目录
    basedir=D:\\developers\\javadeveloper\\SOFT\\mysql-8.0.17-winx64
    # 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
    # datadir=D:\developers\javadeveloper\SOFT\mysql-8.0.17-winx64\data
    # 允许最大连接数
    max_connections=5000
    # 服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    #default_authentication_plugin=mysql_native_password
    innodb_buffer_pool_size=512M
    log_bin_trust_function_creators=1
    lower_case_table_names=1
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    transaction_isolation=READ-COMMITTED
    group_concat_max_len=102400

    #######
    slow_query_log=1
    long_query_time=1
    sync_binlog=1

    #skip-name-resolve
    table_open_cache=4096
    max_allowed_packet=64M
    binlog_cache_size=32M
    max_heap_table_size=128M
    read_rnd_buffer_size=64M
    sort_buffer_size=64M
    join_buffer_size=128M
    thread_cache_size=300
    key_buffer_size=64M
    read_buffer_size=32M
    read_rnd_buffer_size=128M
    bulk_insert_buffer_size=512M
    tmp_table_size=512M

    innodb_buffer_pool_size=1G
    innodb_buffer_pool_instances=8
    innodb_thread_concurrency=8
    innodb_flush_log_at_trx_commit=2
    innodb_log_buffer_size=32M
    innodb_log_file_size=256M
    innodb_log_files_in_group=4
    innodb_max_dirty_pages_pct=90
    innodb_lock_wait_timeout=120

安装

上述工作准备好后,开始安装:

管理员的身份开启cmd, 并且进入mysql目录的bin文件夹

  • 输入初始化命令:

    • 这一步会根据你的my.ini文件初始化的你mysql软件,并且生成root用户的默认初始密码,并打印在控制台
    1
    mysqld --initialize --console
  • 输入安装命令安装:

    1
    mysqld install
  • windows下mysql启停命令

    • 启动:net start mysql
    • 停止:net stop mysql
  • 客户端连接mysql服务器,进入后,会有mysql>样子的数据库交互终端,可以在此终端输入mysql命令或者sql语句了

    1
    mysql -h 127.0.0.1 -P 3306 -u root -p

    参数说明:

    • -h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略;
  • -u : 登录的用户名;

    • -p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。

修改默认root密码

  • 第一次使用mysql需要修改掉默认密码,否则无法使用,修改命令:

    1
    2
    3
    use mysql;
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'Aa1234567!';
    # “Aa1234567!”是我的新密码,mysql8对密码的要求比较高,不能设置的太简单
  • 修改为允许远程访问:

    默认仅仅只有本机可以连接,包括navicat工具也无法连接

    如果需要允许远程访问,需要设置具体的ip,或者换成%允许所有ip访问,

    例如再执行如下命令可以允许所有用户访问。

    查看root用户允许访问的IP值,可以看到只允许本机访问。

    1
    select host, user, authentication_string, plugin from user;
    • 修改root对应的host的值为%, 允许任何ip地址的远程客户端都可以访问我的mysql服务器

      1
      2
      update user set host='%' where user='root';
      flush privileges;
  • 如果出现在使用Navicat Premium 12连接MySQL数据库时会出现Authentication plugin 'caching_sha2_password' cannot be loaded的错误时,在mysql数据库中依次执行如下命令:

    1
    2
    3
    4
    5
    6
    # 修改加密规则
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
    #更新一下用户的密码
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
    #刷新权限 sh
    FLUSH PRIVILEGES;

文件存放目录

  • Data dir : 存放数据文件

  • Data :每创建一个数据库就会创建相应的文件夹

    • frm 保存表的结构信息
  • my.ini: mysql的配置文件

    • 跳过授权验证:skip-grant-table

Windows安装MariaDB

介绍

  • MariaDB将数据转化为结构化信息,应用范围很广,从银行到网站。它是MySQL的一个增强的、临时的替代品。之所以使用MariaDB,是因为它速度快、可伸缩且健壮,具有丰富的存储引擎生态系统、插件和许多其他工具,使得它非常适合各种用例。

  • MariaDB是作为开源软件和关系数据库开发的,它提供了一个SQL接口来访问数据。MariaDB的最新版本还包括GIS和JSON特性。

  • 下载地址:https://downloads.mariadb.org/

下载

  • 下载相对应的电脑版本程序

安装

  • 双击运行,下一步即可安装。

  • 选择Next,设置数据库的密码

  • 设置服务名和端口号

  • 配置完成后,点击安装

  • 等待安装完成..finsh,安装完成,会在桌面生成图标

配置环境变量

  • 因为我安装的位置是默认的,在D盘找到,找到MariaDB 10.4(10.4代表的是版本)

  • 添加bin路径到Path中。

验证

  • 打开cmd命令,输入mysqld

  • 启动mariadb服务进程。在电脑管理,可以看到我们这个服务进程,已经在运行了(默认是MariaDB)

  • 使用数据库(命令:mysql -u 数据库用户名(默认是root) -p)回车,输入密码(安装步骤中设置的密码)

mysql8 配置不区分大小写

  • linux下mysql默认是要区分表名大小写的

  • mysql是否区分大小写设置是由参数lower_case_table_names决定的

  • 参数说明(lower_case_table_names)

    • Lunix下lower_case_table_names默认值为 0 ;Windows下默认值是 1 ;Mac OS X下默认值是 2 。

      1
      2
      3
      4
      5
      | 参数值: 0      | 使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母在硬盘上保存表名和数据库名。名称比较对大小写敏感。在大小写不敏感的操作系统如windows或Mac OS x上我们不能将该参数设为0,如果在大小写不敏感的文件系统上将--lowercase-table-names强制设为0,并且使用不同的大小写访问MyISAM表名,可能会导致索引破坏。

      | 参数值: 1 | 表名在硬盘上以小写保存,名称比较对大小写不敏感。MySQL将所有表名转换为小写在存储和查找表上。该行为也适合数据库名和表的别名。该值为Windows的默认值。

      | 参数值: 2 | 表名和数据库名在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母进行保存,但MySQL将它们转换为小写在查找表上。名称比较对大小写不敏感,即按照大小写来保存,按照小写来比较。注释:只在对大小写不敏感的文件系统上适用! innodb表名用小写保存。
  • lower_case_table_names = 0 表示区分大小写(即对表名大小写敏感),默认是这种设置。这样设置后,在mysql里创建的表名带不带大写字母都没有影响,都可以正常读出和被引用。

  • lower_case_table_names = 1 不区分大小写(即对表名大小写不敏感)表名在硬盘上以小写保存,MySQL将所有表名转换为小写存储和查找表上。该行为也适合数据库名和表的别名

  • 变量lower_case_file_system说明是否数据目录所在的文件系统对文件名的大小写敏感,其中:ON说明对文件名的大小写不敏感,OFF表示敏感。

    1
    2
    3
    4
    5
    6
    7
    8
    mysql> show variables like "%case%";
    +------------------------+-------+
    | Variable_name | Value |
    +------------------------+-------+
    | lower_case_file_system | OFF |
    | lower_case_table_names | 0 |
    +------------------------+-------+
    2 rows in set (0.00 sec)

初始化指定

  • 初始化指定参数

    1
    /usr/sbin/mysqld --initialize --user=mysql --lower-case-table-names=1
  • 配置文件 /etc/my.cnf

    1
    2
    [mysqld]
    lower_case_table_names=1

已区分解决办法

  • 不在意数据的话直接删除数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #删除DATA文件夹
    rm -rf /var/lib/mysql
    #重新初始化并启动MYSQL
    mysqld --initialize --console --lower-case-table-names=1
    chown -R mysql:mysql /var/lib/mysql/
    systemctl start mysqld
    systemctl status mysqld

    #重新初始化登录帐户 vim /etc/my.cnf.d
    # [mysqld]增加
    skip-grant-tables

    # 退出后重启
    systemctl stop mysqld
    systemctl start mysqld

    # 开始重置密码
    mysql -uroot -p --输入任意密码
    # 必须先执行 flush privileges,否则会报The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
    flush privileges;

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'tw369.com';
    UPDATE USER SET host ="%" where user = "root";
    flush privileges;
    exit

    #启动服务
    # 删除配置文件的 skip-grant-tables
    systemctl restart mysqld
  • 保留数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 以安全模式关闭数据库
    mysqladmin -uroot -p shutdown
    # 先在my.cnf里将lower_case_table_names参数再次调整为0,改成区分大小写
    [root@test-huanqiu ~]# cat /etc/my.cnf //添加下面一行设置
    .....
    [mysqld]
    lower_case_table_names=1
    .....
    #启动mysql
    /etc/init.d/mysql start

    # 登陆mysql数据库,将带大写字母的旧表改为小写表名
    alter table 旧表名 rename 新表名"
    # 最后再启动mysql即可!
  • 保留数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #将数据库数据通过mysqldump导出。
    # 备份指定数据库(多个表以空格间隔):mysqldump -uroot -p test > /backup/mysqldump/test.db
    # 备份所有数据库:
    mysqldump -uroot -p --all-databases > /backup/mysqldump/all.db

    # 在my.cnf中更改lower_case_tables_name = 1,并按照删除数据的方式重启mysql数据库。

    # 将导出的数据导入mysql数据库。
    # 在导入备份数据库前,db_name如果没有,是需要创建的;
    mysqladmin -uroot -p create db_name
    mysql -uroot -p db_name < /backup/mysqldump/db_name.db

    # soure 方法
    mysql > use db_name
    mysql > source /backup/mysqldump/db_name.db

Centos 8安装mariadb

安装MariaDB

  1. 安装命令

    yum -y install mariadb mariadb-server

  2. 安装完成MariaDB,首先启动MariaDB

    systemctl start mariadb

  3. 设置开机启动

    systemctl enable mariadb

简单配置

  • 输入mysql_secure_installation
  1. 首先是设置密码,会提示先输入密码

    Enter current password for root (enter for none):<–初次运行直接回车

  2. 设置密码

    1
    2
    3
    Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
    New password: <– 设置root用户的密码
    Re-enter new password: <– 再输入一次你设置的密码
  3. 其他配置

    1
    2
    3
    4
    5
    6
    Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
    Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,
    Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
    Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
    初始化MariaDB完成,接下来测试登录
    mysql -uroot -ppassword
  4. MariaDB查看字符集

    1
    MariaDB [(none)]> show variables like "%character%";show variables like "%collation%";

安装MySQL 8.0

  • 在安装MySQL之前我们先要把CentOS自带的mariadb,如果不卸载的话,在下面的安装中会报错。

  • 查看mariadb版本
    rpm -qa | grep mariadb

  • 卸载mariadb
    rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps

  • 官网下载MySQL)mysql-8.0.21-1.el7.x86_64.rpm-bundle.tar

  • 解压 tar -xvf mysql-8.0.21-1.el7.x86_64.rpm-bundle.tar

  • 可以用rpm -ivh命令来进行安装mysql

  • 必须安装(注意顺序)

    1
    2
    3
    4
    rpm -ivh mysql-community-common-8.0.13-1.el7.x86_64.rpm
    rpm -ivh mysql-community-libs-8.0.13-1.el7.x86_64.rpm
    rpm -ivh mysql-community-client-8.0.13-1.el7.x86_64.rpm
    rpm -ivh mysql-community-server-8.0.13-1.el7.x86_64.rpm
  • 非必要安装(注意顺序)

    1
    2
    3
    4
    rpm -ivh mysql-community-libs-compat-8.0.13-1.el7.x86_64.rpm
    rpm -ivh mysql-community-embedded-compat-8.0.13-1.el7.x86_64.rpm
    rpm -ivh mysql-community-devel-8.0.13-1.el7.x86_64.rpm
    rpm -ivh mysql-community-test-8.0.13-1.el7.x86_64.rpm
  • 安装过程中可能会报以下错误:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    出现问题:
    error:
    Failed dependencies:
    libnuma.so.1()(64bit) is needed by mysql-community-server-8.0.13-1.el7.x86_64 libnuma.so.1(libnuma_1.1)(64bit) is needed by mysql-community-server-8.0.13-1.el7.x86_64 libnuma.so.1(libnuma_1.2)(64bit) is needed by mysql-community-server-8.0.13-1.el7.x86_64
    解决办法:
    yum install numactl -y
    出现问题:
    error:
    Failed dependencies:
    pkgconfig(openssl) is needed by mysql-community-devel-8.0.13-1.el7.x86_64
    解决办法:
    yum install openssl-devel.x86_64 openssl.x86_64 -y
    出现问题:
    error:
    Failed dependencies:
    perl(Data::Dumper) is needed by mysql-community-test-8.0.13-1.el7.x86_64
    解决办法:
    yum -y install autoconf
    出现问题:
    error:
    Failed dependencies:
    perl(JSON) is needed by mysql-community-test-8.0.13-1.el7.x86_64
    解决办法:
    yum install perl.x86_64 perl-devel.x86_64 -y
    yum install perl-JSON.noarch -y
  • 解决依赖问题,使用强制安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    rpm -Uvh mysql-community-libs-8.0.21-1.el7.x86_64.rpm --nodeps --force
    rpm -Uvh mysql-community-libs-compat-8.0.21-1.el7.x86_64.rpm --nodeps --force
    rpm -Uvh mysql-community-client-8.0.21-1.el7.x86_64.rpm --nodeps --force
    rpm -Uvh mysql-community-server-8.0.21-1.el7.x86_64.rpm --nodeps --force

    # 报错:centos error while loading shared libraries: libssl.so.10: cannot open shared object file: No such file or directory
    yum install compat-openssl10

    # 报错:mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

    yum install libncurses*
  • 启动并运行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 初始化数据库
    mysqld --initialize --console --user=mysql --lower-case-table-names=1
    # 目录授权,不授权的话MySQL没有写入权限,会启动失败
    chown -R mysql:mysql /var/lib/mysql/
    # 启动msyql服务
    systemctl start mysqld
    # 停止MySQL命令:
    systemctl stop mysqld
    # 查看msyql服务的状态
    systemctl status mysqld
    systemctl enable mysqld
    # 查看一下临时密码
    cat /var/log/mysqld.log | grep password
    # 执行下列mysql命令 修改密码
    sudo mysql_secure_installation

Centos 8安装MySQL 8.0

  • 默认的CentOS 8存储库中安装最新版本的MySQL数据库服务器8.0版

  • CentOS 8还提供了MariaDB 10.3,它是MySQL 5.7的直接替代品。

安装

  • 通过以root用户或具有sudo特权的用户身份使用CentOS软件包管理器来安装MySQL 8.0服务器:

  • @mysql模块将安装MySQL及其所有依赖项。

    1
    $ sudo dnf install @mysql

检查

  • 启动时自动启动:

    1
    2
    3
    $ sudo systemctl enable --now mysqld

    Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.
  • 要检查MySQL服务器是否正在运行,请输入:systemctl status mysqld

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $ sudo systemctl status mysqld
    #返回信息如下:
    [root@centos ~]# sudo systemctl status mysqld
    ● mysqld.service - MySQL 8.0 database server
    Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor pres>
    Active: active (running) since Wed 2020-01-08 13:29:20 CST; 14s ago
    Process: 16940 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, s>
    Process: 16725 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.service >
    Process: 16701 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, sta>
    Main PID: 16897 (mysqld)
    Status: "Server is operational"
    Tasks: 39 (limit: 4509)
    Memory: 439.9M
    CGroup: /system.slice/mysqld.service
    └─16897 /usr/libexec/mysqld --basedir=/usr

修改身份验证插件

  • 由于CentOS 8中的某些客户端工具和库与caching_sha2_password方法不兼容,因此CentOS 8存储库中包含的MySQL 8.0服务器设置为使用旧的mysql_native_password身份验证插件,该方法在上游MySQL 8.0发行版中设置为默认。

  • 对于大多数设置,mysql_native_password方法应该没问题,但是,如果你想将默认身份验证插件更改为caching_sha2_password,这样可以更快并提供更好的安全性,请打开以下配置文件:

    1
    $ sudo vim /etc/my.cnf.d/mysql-default-authentication-plugin.cnf
  • 将default_authentication_plugin的值更改为 caching_sha2_password:

    1
    2
    [mysqld]
    default_authentication_plugin=caching_sha2_password
  • 关闭并保存文件,然后重新启动MySQL服务器以使更改生效:

    1
    $ sudo systemctl restart mysqld

设置MySQL根密码

  • 运行mysql_secure_installation脚本,该脚本执行一些与安全性相关的操作并设置MySQL根密码:

    1
    $ sudo mysql_secure_installation
  1. 系统将要求你配置VALIDATE PASSWORD PLUGIN(验证密码插件),该插件用于测试MySQL用户密码的强度并提高安全性,密码验证策略分为三个级别:低、中和强,如果你不想设置验证密码插件,请按Enter。

  2. 在下一个提示符下,将要求你设置MySQL root用户的密码,完成此操作后,脚本还将要求你删除匿名用户,限制root用户对本地计算机的访问,并删除测试数据库,你应该对所有问题回答“是”。

  3. 要从命令行与MySQL服务器进行交互,请使用MySQL客户端实用程序,它作为依赖项安装,通过键入以下内容测试根访问权限:

卸载

  • 命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    dnf remove  @mysql

    find / -name mysql

    rm -rf /var/lib/selinux/targeted/active/modules/100/mysql
    rm -rf /var/lib/mysql
    rm -rf /var/lib/mysql/mysql
    rm -rf /var/log/mysql
    rm -rf /usr/share/selinux/packages/mysql
    rm -rf /usr/share/selinux/targeted/default/active/modules/100/mysql

CentOS 7安装MariaDB

安装

  1. 更新CentOS 7操作系统

    确保所运行的是最新的CentOS 7服务器,运行以下命令:

    1
    sudo yum  -y update
  2. 添加MariaDB 10.4存储库

    更新CentOS 7系统后,将MariaDB YUM存储库添加到CentOS 7服务器:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    cat >/etc/yum.repos.d/MariaDB.repo<<EOF

    [mariadb]

    name = MariaDB

    baseurl = http://yum.mariadb.org/10.4/centos7-amd64

    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

    gpgcheck=1

    EOF

    然后更新yum缓存索引:

    sudo yum makecache fast
  3. 使用yum软件包管理器安装MariaDB 10.4:

    • 有关已安装软件包的更多详细信息,请运行$ rpm -qi MariaDB-server
    1
    sudo yum -y install MariaDB-server MariaDB-client
  4. 启动并启用MariaDB服务:

    1
    sudo systemctl enable --now mariadb

设置密码

  • 现在在CentOS 7上安装了MariaDB 10.4,通过运行mysql_secure_installation来保护它:内容同上。

    1
    $ sudo mysql_secure_installation

Centos 7安装mysql5.7

  • centos上默认是没有yum源的,所以我们需要自己先配置yum源。配置yum源步骤如下
  1. 下载yum源

    1
    wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm'
  2. 安装yum源

    1
    rpm -Uvh mysql57-community-release-el7-11.noarch.rpm
  3. 查看有哪些版本的mysql:

    1
    yum repolist all | grep mysql

安装

  1. 执行yum命令安装

    1
    yum install -y mysql-community-server
  2. 启动mysql

    1
    2
    systemctl start mysqld
    # centos6中,使用service mysqld start
  3. 查看状态

    1
    systemctl status mysqld
  4. 登录数据库,修改数据库密码

  5. tar方式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    # 检查系统中有无安装过mysql
    rpm -qa|grep mysql

    # 查询所有mysql 对应的文件夹,全部删除
    whereis mysql
    find / -name mysql

    # 查看系统自带的Mariadb
    rpm -qa|grep mariadb
    mariadb-libs-5.5.44-2.el7.centos.x86_64
    # 卸载系统自带的Mariadb
    rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64
    # 删除etc目录下的my.cnf ,一定要删掉,等下再重新建,之前我将就用这个文件,后面改配置各种不生效
    rm /etc/my.cnf
    # 检查mysql 用户组是否存在
    cat /etc/group | grep mysql
    cat /etc/passwd |grep mysql

    # 创建mysql 用户组和用户
    groupadd mysql
    useradd -r -g mysql mysql

    # 下载tar /usr/local/
    https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-5.7.36-linux-glibc2.12-x86_64.tar

    tar -xvf mysql-5.7.36-linux-glibc2.12-x86_64.tar
    tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
    # 顺便改一下名字
    mv mysql-5.7.36-linux-glibc2.12-x86_64 /usr/local/mysql
    # 更改mysql 目录下所有文件夹所属的用户组和用户,以及权限
    chown -R mysql:mysql /usr/local/mysql
    chmod -R 755 /usr/local/mysql

    # 进入mysql/bin/目录,编译安装并初始化mysql
    mkdir -p /usr/local/mysql/data
    ./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --lower-case-table-names=1

    # 编写配置文件 my.cnf ,并添加配置
    vi /etc/my.cnf
    [mysqld]
    datadir=/usr/local/mysql/data
    port = 3306
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    symbolic-links=0
    max_connections=400
    innodb_file_per_table=1
    #表名大小写不明感,敏感为
    lower_case_table_names=1

    # 启动mysql 服务器
    /usr/local/mysql/support-files/mysql.server start
    //添加软连接
    ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
    ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

    //重启mysql服务
    service mysql restart

    ,Rhtxud(a6p4

    mysql -u root -p # 密码是之前生成的临时密码
    set password for root@localhost = password('123456');
    use mysql;
    update user set user.Host='%' where user.User='root';
    flush privileges;

    # 设置开机自启
    //将服务文件拷贝到init.d下,并重命名为mysql
    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    //赋予可执行权限
    chmod +x /etc/init.d/mysqld
    //添加服务
    chkconfig --add mysqld
    //显示服务列表
    chkconfig --list

修改密码

  • mysql5.7的新特性之一就是在初始化的时候会生成一个自定义的密码,然后你需要找到这个密码,登录的时候输入。

  • 找到密码: 红框的地方就是密码

    1
    grep 'temporary password' /var/log/mysqld.log
  • 登录客户端

    1
    2
    # 修改密码
    SET PASSWORD = PASSWORD('Admin123!');
  • 设置远程可以登录

    • 将云服务器上的3306端口开放;

    • 配置远程可以访问。

      1
      2
      3
      4
      5
      GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Admin123!' WITH GRANT OPTION;

      flush privileges;

      如果还不行可以尝试重启一下数据库。

简单的配置

  • 打开配置文件,yum安装的默认在/etc文件夹下:vim /etc/my.cnf

  • 在[mysqld]下面添加,不需要分号

    • 字符集:注意是utf8而不是utf-8!
      character-set-server=utf8
      这时候使用show variables like 'char%';就可以查看到字符集都是utf8了
    • sql支持group by语句
      sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    • 设置时区为东八区
      default-time_zone = '+8:00'
  • 最后重启数据库,使配置生效。

设置开机启动

1
2
systemctl enable mysqld
systemctl daemon-reload

Ubuntu安装MySQL

下载deb包

安装deb

  • 下载完成后执行命令

    1
    sudo dpkg -i mysql-apt-config_0.8.14-1_all.deb
  • 安装过程出现下图选择OK

  • sudo apt update

安装mysql8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# sudo apt install mysql-server

Configuration file '/etc/mysql/mysql.cnf'
==> Deleted (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
*** mysql.cnf (Y/I/N/O/D/Z) [default=N] ? y
Installing new version of config file /etc/mysql/mysql.cnf ...

Configuration file '/etc/mysql/mysql.conf.d/mysqld.cnf'
==> Deleted (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
*** mysqld.cnf (Y/I/N/O/D/Z) [default=N] ? y

  1. 输入root密码

  2. 身份认证插件有如下 2 种可供选择:

    • 使用存储密码加密(推荐)
    • 使用传统认证模式(MySQL 5.x 兼容)

  3. 查看mysql是否安装成功

    1
    mysql -u root -p

安装5.7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
sudo apt install mysql-server-5.7
# 修改启动方式
sudo service mysql start

sudo mysql_secure_installation
# 将密码安全级别降低即可
# mysql> SET GLOBAL validate_password_policy=LOW;
#第一个回车,其他yes

mysql> create user 'fulsun'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on *.* to 'fulsun'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

root@PC:/home/zy/d/temp# mysql -ufulsun -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.28-0ubuntu0.19.04.2 (Ubuntu)

卸载

  • 该方法是彻底删除ubuntu下面的文件,所以mysql原数据会被删掉,所以一定一定要记得备份.
  1. 输入下面命令

    1
    sudo apt-get remove --purge mysql-\*
  2. 手动删除mysql剩余文件,执行命令

    1
    2
    3
    4
    5
    sudo find  / -name mysql -print
    # 接下来一一删除:执行命令
    sudo rm -rf /var/lib/mysql
    sudo rm -rf /etc/mysql
    sudo rm -rf /ect/init.d/mysql

Debian下安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# 下载
wget https://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
# 解压安装包
tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
# 移动并重命名
mv mysql-5.7.36-linux-glibc2.12-x86_64 /usr/local/mysql
# 进入目标目录
cd /usr/local/mysql
# 创建MySQL用户和组
groupadd mysql

# 因为用户仅用于所有权目的,而不是登录目的,所以useradd命令使用 -r和-s /bin/false选项
useradd -r -g mysql -s /bin/false mysql

# 创建指向安装目录的符号链接
# 为了避免在使用 MySQL 时总是输入客户端程序的路径名,可以将/usr/local/mysql/bin 目录添加到PATH变量中
vim /etc/profile
# 在文件尾部加上如下代码后保存退出,一定要是最末尾
export PATH=$PATH:/usr/local/mysql/bin
# 刷新文件,使配置生效
source /etc/profile为了避免在使用 MySQL 时总是输入客户端程序的路径名,可以将/usr/local/mysql/bin 目录添加到PATH变量中
vim /etc/profile
# 在文件尾部加上如下代码后保存退出,一定要是最末尾
export PATH=$PATH:/usr/local/mysql/bin
# 刷新文件,使配置生效
source /etc/profile

#始化mysql
mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --initialize
# 密码
grep 'temporary password' /usr/local/mysql/log/mysql.err

# 设置MySQL服务
# 将mysql.server放置到/etc/init.d/mysql中
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# 赋予可执行权限
chmod +x /etc/init.d/mysqld
# 添加服务
sysv-rc-conf mysqld on
# 显示服务列表
sysv-rc-conf --list

# 如果看到mysql的服务,并且3,4,5都是开的话则成功,如果是关,则键入
sysv-rc-conf --level 345 mysqld on

# 有些人设置的mysql,都一样,服务名字而已
启动MySQL

service mysql start
查看mysql进程

ps -ef|grep mysql

修改root密码

SET PASSWORD = PASSWORD('123456');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;

远程连接
use mysql
# 使root能再任何host访问
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;

Scoop安装Mysql

  • 安装

    1
    scoop install vcredist2022 mysql57
  • 管理员设置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    mysqld --install MySQL --defaults-file="D:\Scoop\apps\mysql57\current\my.ini"
    Service successfully installed.

    # 启动
    net start mysql

    # 启动失败 删除 Scoop\persist\mysql57\data下的内容
    mysqld --initialize-insecure

    # 修改密码 mysqladmin -uroot -p oldpwd password 123456;
    # ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
    mysql -uroot
    use mysql # 连接权限数据库
    update user set authentication_string=password('123456') where user='root' and host='localhost'; # 改密码
    flush privileges; # 刷新权限

    # 开启远程
    use mysql # 连接权限数据库
    update user set host = '%' where user = 'root';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
    flush privileges;
  • mysql57.json

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    {
    "homepage": "https://dev.mysql.com/downloads/mysql/5.7.html",
    "description": "The world's most popular open-source database, supported by an active community.",
    "version": "5.7.40",
    "license": "GPL-2.0-only",
    "architecture": {
    "64bit": {
    "url": "https://dev.mysql.com/get/mysql-5.7.40-winx64.zip",
    "hash": "md5:ac3874006f7e391b9413fb6cabd1a12b",
    "extract_dir": "mysql-5.7.40-winx64"
    },
    "32bit": {
    "url": "https://dev.mysql.com/get/mysql-5.7.40-win32.zip",
    "hash": "md5:9abd10d47bdfdb1123411cfb723d401c",
    "extract_dir": "mysql-5.7.40-win32"
    }
    },
    "bin": [
    "bin\\innochecksum.exe",
    "bin\\myisamchk.exe",
    "bin\\myisamlog.exe",
    "bin\\myisampack.exe",
    "bin\\myisam_ftdump.exe",
    "bin\\mysql.exe",
    "bin\\mysqladmin.exe",
    "bin\\mysqlbinlog.exe",
    "bin\\mysqlcheck.exe",
    "bin\\mysqld.exe",
    "bin\\mysqldump.exe",
    "bin\\mysqlimport.exe",
    "bin\\mysqlshow.exe",
    "bin\\mysqlslap.exe",
    "bin\\mysql_config_editor.exe",
    "bin\\mysql_secure_installation.exe",
    "bin\\mysql_ssl_rsa_setup.exe",
    "bin\\mysql_tzinfo_to_sql.exe",
    "bin\\mysql_upgrade.exe",
    "bin\\my_print_defaults.exe"
    ],
    "persist": ["data", "my.ini"],
    "pre_install": [
    "$ini = \"$dir\\my.ini\"",
    "if (!(Test-Path \"$ini\")) {",
    " # Using $dir instead of $persist_dir, causes this error:",
    " # [ERROR] [MY-010187] [Server] Could not open file '~/scoop/apps/mysql/current/data/host.err' for error logging: Permission denied",
    " Add-Content -Path \"$ini\" -Value \"[mysqld]`ndatadir=$($persist_dir -replace '\\\\', '/')/data\" -Encoding Ascii",
    " # Set username so it's not required when connecting",
    " Add-Content -Path \"$ini\" -Value \"[client]`nuser=root\" -Encoding Ascii",
    "}"
    ],
    "post_install": [
    "if (!(Test-Path \"$dir\\data\\auto.cnf\")) {",
    " warn 'Initializing data directory ...'",
    " Invoke-ExternalCommand -FilePath \"$dir\\bin\\mysqld.exe\" -ArgumentList '--initialize-insecure'",
    " warn 'Database has been initialized (username: root, password: <blank>)'",
    "}"
    ],
    "checkver": {
    "url": "https://dev.mysql.com/downloads/mysql/5.7.html",
    "regex": "<h1>MySQL Community Server ([\\d.]+)"
    },
    "autoupdate": {
    "architecture": {
    "64bit": {
    "url": "https://dev.mysql.com/get/mysql-$version-winx64.zip",
    "extract_dir": "mysql-$version-winx64"
    },
    "32bit": {
    "url": "https://dev.mysql.com/get/mysql-$version-win32.zip",
    "extract_dir": "mysql-$version-win32"
    }
    },
    "hash": {
    "url": "https://dev.mysql.com/downloads/mysql/5.7.html",
    "regex": "(?sm)$basename.*?md5\">([A-Fa-f\\d]{32})"
    }
    },
    "notes": [
    "Run 'mysqld --standalone' or 'mysqld --console' to start the Database,",
    "or run following command as administrator to register MySQL as a service. See: https://dev.mysql.com/doc/refman/5.7/en/windows-start-service.html",
    "",
    "mysqld --install MySQL --defaults-file=\"$dir\\my.ini\"",
    "",
    "To stop and/or delete the Service run 'sc stop MySQL' and 'sc delete MySQL'."
    ]
    }

在线方式

Debain/Ubuntu

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#vi /etc/apt/sources.list.d/mysql-community.list
deb https://mirrors.tuna.tsinghua.edu.cn/mysql/apt/debian bookworm mysql-5.7 mysql-tools
deb https://mirrors.tuna.tsinghua.edu.cn/mysql/apt/debian bookworm mysql-8.0 mysql-tools
sudo apt install gnupg
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B7B3B788A8D3785C
sudo apt update
sudo apt-get install mysql-server
# 尝试使用以下命令来查看它是否能修复破坏的依赖项.
sudo apt-get install -f

# 如果还失败,清除MySQL服务器:
sudo apt-get purge mysql-community-server mysql-server
# 然后清理并更新:
sudo apt-get autoclean && sudo apt-get clean && sudo apt-get update
# 做一般升级:
sudo apt-get upgrade
# 尝试重新安装:
sudo apt-get install mysql-server and mysql-community-server

my.ini 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
## mysqld --initialize-insecure. 修改密码 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
[client]
user=root
port=3306
[mysqld]
port=3306
datadir=/usr/local/mysql57/data
########
character-set-server=utf8
innodb_buffer_pool_size=512M
log_bin_trust_function_creators=1
lower_case_table_names=1
max_connections=5000
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
transaction_isolation=READ-COMMITTED
group_concat_max_len=102400

#######
slow_query_log=1
long_query_time=1
sync_binlog=1

#skip-name-resolve
table_open_cache=4096
max_allowed_packet=64M
binlog_cache_size=32M
max_heap_table_size=128M
read_rnd_buffer_size=64M
sort_buffer_size=64M
join_buffer_size=128M
thread_cache_size=300
key_buffer_size=64M
read_buffer_size=32M
read_rnd_buffer_size=128M
bulk_insert_buffer_size=512M
tmp_table_size=512M

innodb_buffer_pool_size=1G
innodb_buffer_pool_instances=8
innodb_thread_concurrency=8
innodb_flush_log_at_trx_commit=2
innodb_log_buffer_size=32M
innodb_log_file_size=256M
innodb_log_files_in_group=4
innodb_max_dirty_pages_pct=90
innodb_lock_wait_timeout=120