Chapter 2 Installing and Upgrading MySQL 安装和升级 MySQL

Chapter 2 Installing and Upgrading MySQL 安装和升级 MySQL

2.10 Postinstallation Setup and Testing (安装后的设置和测试)

2.10.1 Initializing the Data Directory
2.10.2 Starting the Server
2.10.3 Testing the Server
2.10.4 Securing the Initial MySQL Accounts
2.10.5 Starting and Stopping MySQL Automatically

这个章节 讨论 你需要执行在安装MySQL后:

1.如果需要的话,初始化数据目录和创建MySQL 授权表: 对于一些MySQL 安装方式,

数据目录初始化 可以被自动处理:

1.安装在Windows 上

  1. 安装在Linux上使用server RPM 包

对于其他平台和安装类型, 包括从2进制和源代码安装,你必须初始化数据目录:

给在授权表里任何的初始账户 授权密码, 如果在数据目录初始化期间没有做,密码防止未认证的访问Mysql 数据库。

你也需要限制访问你的test数据库:
2.10.1 Initializing the Data Directory

2.10.1.1 Problems Running mysql_install_db

在安装MySQL后,你必须初始化数据目录,包括在mysql 系统数据库中的表。 由于一些MySQL 安装方式,数据目录初始化可能会自动处理,

对于其他的安装方式,包括generic binary and source distributions安装方式,你必须自己初始化目录。

这个章节讨论如何初始化数据目录在Unix 和类Unix 系统

这里有一个例子, server 运行在mysql的登录账户用户ID下运行。 这个假设这个账户存在, 如果不存在创建账户,

或者替换一个不同的现有的账户的名称。

1.改变 位置进入你的MySQL 安装的顶级目录,这里的代表是 BASEDIR:

shell> cd BASEDIR

BASEDIR 像 /usr/local/mysql ,/usr/local 或者/usr/bin。下面的步骤假设 你已经改变了这个目录:

你会发现几个文件和子目录在BASEDIR目录下。 最重要的安装目的是bin和scripts子目录,包含了server 的客户端程序和功能程序:

2.如果需要,初始化数据目录,包括mysql 数据库包含了 初始化的MySQL 授权表,决定了允许用户连接到server。

典型的,数据目录初始化需要做在首次安装MySQL的时候。如果你再更新一个已经存在的安装,你需要运行mysql_upgrade。

然而,命令 初始化数据目录不覆盖写任何存在的权限表,所以在任何情况下都应该安全运行.

shell> scripts/mysql_install_db –user=mysql

重要的是要确保 数据库目录和文件属于mysql 登录账户,因此 server 有读和写的访问在你运行后,确保 如果你用root运行mysql_install_db ,

包括–user 选项。否则, 你需要用mysql 登录执行,在这种情况下 你可以忽略–user选项。

mysql_install_db 命令创建server的数据目录, 在数据目录下,它创建目录用于mysql 数据库拥有授权表和test database,用于你测试。

程序也创建整个权限表用于初始化用户

可能需要指点其他的选项 –basedir 或者 –datafir 如果mysql_install_db 不确定正确的位置用于安装目录或者数据目录:

shell> scripts/mysql_install_db –user=mysql
–basedir=/opt/mysql/mysql
–datadir=/opt/mysql/mysql/data

     对于更加安全的安装,调用mysql_install_db 用一个 --random-passwords选项, 这个导致它会分配一个随机的密码给MySQL root 账户,

     设置密码过期flsg 用于那些账号, 删除任何匿名的MySQL 账户。 详细的信息,查看4.4.3 mysql_install_db — Initialize MySQL Data Directory


    如果 你不想要 test数据库,你可以删除它在启动server后

    在初始化数据目录后,你可以建立最终的ownership 设置。 设置安装owner为mysql,no action is required here。


    否则, 大多数的MySQL 安装 可以属主是root. 数据目录 必须属于mysql,为了完成这个,用root运行下面的命令在安装目录下。

shell> chown -R root .
shell> chown -R mysql data

如果插件目录(目录的命名通过plugin_dir system variable),它可以让一个用户 执行code 到一个目录使用SELECT ..INTO.

2.10.2 Starting the Server

2.10.2.1 在MySQL Server 启动的疑难问题

本章节 描述如何启动server 在Unix和类Unix系统上。

Start the MySQL server like this:

shell> bin/mysqld_safe –user=mysql &

这是重要的用一个非root用户运行Mysql, 确保如果你用root 运行mysqld_safe,包括–user 选项。否则, 执行程序当用mysql登陆的时候,

在这种情况下,你可以忽略该命令——用户选项。

如果命令立即失败 打印出mysqld ended,寻找日志中的错误信息(默认在数据目录下的host_name.err文件)

如果服务器不能访问数据目录,它启动时读取授权表在mysql 数据库,它将错误信息写入err log.这类问题可能发生在你没有创建授权表在初始化数据目录

2.10.4 Securing the Initial MySQL Accounts 安全初始化 MySQL 账户:

在MySQL 安装过程包括初始化数据目录, 包括mysql database 包含了授权表,定义了初始化的MySQL 账户。

mysql.user 授权表定义了初始化的Mysql 用户账户和他们的访问权限:

有些账户有user name root, 这些是超级用户账户 有所有的权限可以做任何事情,如果那些root 账户有空密码,任何用户可以用root

连接到mysql 不需要使用密码。

在Unix中,每个root 账户允许从本地主机连接, 连接可以通过指定主机名localhost,ip地址127.0.0.1 或者实际的主机名或者IP

试图连接到host 127.0.0.1 通常解析到本地账户,然而, 这个可能会失败 在带上–skip-name-resolve

如果账户为匿名用户被创建, 这些有空的username. 匿名用户没有密码, 因此任何人可以连接到Mysql.

在Unix上,每个匿名账户允许从本地主机连接, 连接可以通过制定host name

‘root’@’localhost’ 账户在mysql.procies_priv 里也有一条记录,允许授予PROXY privilege for ”@”, 即,对于所有的用户和主机。

这个允许root 来设置代理用户.

要显示的账户存在于mysql.user表和检查是否它们的密码是空的,使用下面的语句:
mysql> SELECT User, Host, Password FROM mysql.user;
+——+——————–+———-+
| User | Host | Password |
+——+——————–+———-+
| root | localhost | |
| root | myhost.example.com | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
| | myhost.example.com | |
+——+——————–+———-+

这个输出显示有几个root 和匿名的user 账户, 没有一个有密码。输出可能在你的系统上有所不同,但使用空密码的账户存在意味着

你的MySQL 安装没有被保护。

分配给MySQL root 账户没有密码的:

为防止用匿名用户没有密码的连接, 可以为每个匿名的账户分配密码或者删除它们。

此外, mysql.db表 包含了访问运行所有的账户访问test数据库和其他数据库 以test_开头的记录。

下面的说明描述了如何设置初始化的MySQL 账户的密码,首先是root 账户,然后是匿名账户。也覆盖了如何删除匿名账户,

如果你不喜欢匿名访问,删除如何访问test 数据库.

2.11 Upgrading or Downgrading MySQL

2.11.1 Upgrading MySQL
2.11.2 Downgrading MySQL
2.11.3 Checking Whether Tables or Indexes Must Be Rebuilt
2.11.4 Rebuilding or Repairing Tables or Indexes
2.11.5 Copying MySQL Databases to Another Machine

这个章节 描述了升级或者下载Mysql 安装步骤

升级是一种常见的过程,当你修复bug在同样的MySQL 版本或者显著的特征在主要的版本间,

你执行这个过程首先在测试系统上,确保所有的工作顺利进行,然后在生产系统中进行操作.

2.11.1 Upgrading MySQL 升级MySQL

2.11.1.1 Upgrading MySQL with the MySQL Yum Repository
2.11.1.2 Upgrading MySQL with the MySQL APT Repository
2.11.1.3 Upgrading from MySQL 5.5 to 5.6

作为一般规则,从一个版本升级到另一个版本, 到下一个系列 相比跳过一个系列。

从一个先前的版本升级到MySQL 5.5,升级到每个成功的发布版本 知道你已经达到MySQL 5.5,

然后继续升级到MySQL 5.6.比如, 你当前正在运行Mysql 5.1 希望升级到一个新的版本,

首选升级到MySQL 5.5 在审计到5.6前,

手册:

升级到MySQL 5.6,使用下面的指引:

1.在升级前,备份你的数据库,包括mysql database 包含了授权表

  1. 阅读2.11.1.3章节所有的注意点, “Upgrading from MySQL 5.5 to 5.6”. 那些注意点让你确定升级问题,

应用于当前的Mysql 安装。在这一节中讨论过的一些不兼容的升级需要你的关注。其他要求在升级后采取一些行动。

3.阅读发型说明,提供了相关的特性

2.10.1.3 Upgrading from MySQL 5.6 to 5.7

在你安装任何新的版本前备份数据库,尽管MySQL 非常努力的来确保高的质量,通过备份保护你的数据。

从之前的任何版本升级到5.6, Mysql 推荐你dump 你的表用mysqldump 在你升级和reload file 在升级后,

使用–all-databases 选项来dump所有的数据库。如果你数据库包含存储过程使用–routines and –events options

升级Mysql 5.6到5.7,MySQL 推荐执行一个2进制升级

1.停止 old(Mysql 5.6) server

  1. 升级MySQL binaries 或者包 (用5.7的代替5.6的binaries)

3.启动MySQL 5.7 server 使用存在的数据目录

4.运行mysql_upgrade 来升级系统表和初始化

另一种方法是使用此过程进行逻辑升级

1.导出从先前的版本的数据

shell> mysqldump –all-databases –routines –events
–add-drop-tables –flush-privileges=0 > data-for-upgrade.sql

2.停止老的(Mysql 5.6) server

3.安装MySQL 5.7

4.初始化一个新的数据目录

shell> mysqld –initialize –datadir=/path/to/5.7-datadir

  1. 启动Mysql 5.7 server 使用新的数据目录

  2. 设置root 密码和impoer 之前导出的dump 文件

shell> mysql -u root -p
Enter password: ** <- enter temporary root password
mysql> ALTER USER USER() IDENTIFIED BY ‘your new password’;
mysql> source data-for-upgrade.sql

  1. 运行mysql_upgrade 来升级系统表和初始化用于5.7使用

执行一个直接升级早多余一个主要版本间(比如,Mysql 5.5到5.7),是不推荐的,也是不支持的。

如果你需要这么做,推荐你用binary upgrade 步骤 用于每个临时版本。 比如5.5到5.7:
1.Upgrade the MySQL binaries/packages from 5.5 to 5.6

2.Start MySQL 5.6 using the existing data directory

3.Run mysql_upgrade to upgrade the system tables and initialize everything for 5.6 use

4.Upgrade the MySQL binaries/packages from 5.6 to 5.7

5.Start MySQL 5.7 using the existing data directory

6.Run mysql_upgrade to upgrade the system tables and initialize everything for 5.7 use

通常,当从5.6升级到5.7 做下面的步骤:

  1. 读取所有的注意事项在那些章节,来确认它们是否会影响应用。

Section 2.10.1, “Upgrading MySQL”, has general update information.

2.在更改列表里的项目提供了本节稍后使您能够识别的升级问题,应用于当前的MySQL安装。一些不兼容的讨论需要你注意升级前。其他应处理后升级

3.MySQL 5.7版本 注意事项描述了重要的新特性 你可以在5.7使用或者不同于那些在早期的MySQL版本发现的新功能。这些变化可能会导致不兼容。

标记为已经的问题或者不兼容的改变与早期的版本不兼容,可能在你升级需要注意。我们的目的是为了避免这些改变,

但偶尔他们需要被纠正.如果适用于您的安装的任何升级问题涉及一个不兼容,需要特殊处理,按照不兼容的说明中给出的说明。有时这涉及倾销和重装的表,或使用声明,如检查表或修表。

对于dump 和reload 指定, see Section 2.10.4, “Rebuilding or Repairing Tables or Indexes”.

任何procedure 调用REPAIR TABLE 用USE_FRM 选项必须在升级前被执行。

在升级到新版本前,Section 2.10.3, “Checking Whether Tables or Indexes Must Be Rebuilt”,

查看是够对于表格式或者character sets 的改变在当前版本和 你要升级的版本。

当升级到新的版本后,运行 mysql_uograde(see Section 4.4.7, “mysql_upgrade — Check and Upgrade MySQL Tables”).

这个程序检查你的表,尝试修复它们 如果需要的话,它也更新你的授权表来确认 它们有正确的结构,你可以使用新的功能。(MySQL版本介绍一些变化的授权表的结构来添加新的权限或功能。)

mysql_upgrade 不升级help table的内容。

如果你使用InnoDB,考虑设置innodb_fast_shutdown=0 在你关闭和升级你的server前.

当你设置 innodb_fast_shutdown to 0,InnoDB 做一个慢的关闭,一个full purge 和a change buffer merge before shutting down,

以确保所有的数据文件是充分准备的情况下升级过程中修改的文件格式。

如果你的MySQL 安装包含大量的数据,需要花费很长的时间来转换在一个升级后,

你可能发现它是有用的来创建一个”dummy” 数据库 实例用于访问

请阅读下面的部分内容,看看是否有可能影响你的应用程序:

Configuration Changes

不兼容的更改: 在Mysql 5.7.6, 在Linux 上,Mysql 使用RPM包安装,

server 启动和关闭使用现有的服务而不是mysqld_safe,mysqld_safe 没有被安装。

不兼容的改变: 在Mysql 5.7.5,那些SQL模式改变了:

严格的SQL模式用于事务存储引擎(STRICT_TRANS_TABLES) 默认被启用

only_full_group_by SQL模式的实施已变得更加成熟,不再拒绝确定性查询先前被拒绝。因此,only_full_group_by现在是默认启用的,禁止含有不确定性的查询不能保证是唯一确定的组中的表达

Server Changes

不兼容的改变: mysql.user 表的Password 列 在MySQL 5.7.6中被删除。 所有的认证被存储在authentication_string列,

包括原来存储Password 列。你可以执行一个binary(in-place) 升级到MySQL 5.7.6

如果你打算通过加载mysqldump 文件从一个老的版本(pre-5.7.6) 升级安装,你必须观察 那些条件用于mysqldump命令用于产生文件:

You must include the –add-drop-table option

You must not include the –flush-privileges option

2.11.3 Checking Whether Tables or Indexes Must Be Rebuilt 检查表或者索引是否需要rebulit:

一个二进制升级或者降级是 安装一个版本 替换一个存在的版本,不通过dump或者reload 表。

  1. Stop 当前运行的mysql

2.安装一个不同的MySQL版本。

3.启动新的版本

在很多情况下,先前的Mysql 版本的表 可以使用在新的版本中没有问题。然而,有些改变需要表或者索引被重建,

在这章节有描述:

如果你有表被影响, 重建表和索引是必要的

表不兼容:

binary 升级从Mysql 5.0 到Mysql 5.1 安装包含了归档表,访问这些表会导致server crash,即使你运行了mysql_upgrade 或者

CHECK TABLE .. FOR UPDATE,要解决此问题,使用mysqldump 来dump 所有的ARCHIVE 表在你升级前,

在升级完后 加载到Mysql 5.1.

升级问题在Mysql 5.6.4 中解决, server 可以打开Mysql 5.0 创建的ARCHIVE 表,

但是仍然推荐升级过程dump 5.0的ARCHIVE 表在你升级前。

Index Incompatibilities

在mysql 5.6.3,索引前缀的长度限制从767字节变为3072字节, InnoDB 表使用 ROW_FORMAT=DYNAMIC

或者ROW_FORMAT=COMPRESSED。 查看14.5.7, “Limits on InnoDB Tables” 详细信息。

这一变化 回迁到MySQL 5.5.14. ,如果你从一个或更高的版本降级

原文地址:https://www.cnblogs.com/hzcya1995/p/13351491.html