导言:本文主要记录MySQL在Linux服务器上安装时,一些关键操作和步骤。
安装
- RPM
优点:简单
缺点:不灵活,缺少个性化设置 - 二进制
优点:优化版本
缺点:安装比RPM麻烦 - 源代码
优点:个性化
缺点:需要知道如何构建
# 创建必要的组和拥有者
groupadd mysql
useradd -g mysql mysql
# 下载解压
cd /usr/src
gunzip < /usr/src/mysql-VERSION.tar.gz | tar xvf -
cd mysql-VERSION
# 配置,生成并安装
./configure --prefix=/usr/local/mysql [other-configuration-flags]
make
make install
# 将MySQL配置文件(my.cnf)复制到其典型位置,并设置其所有关系
cp support-files/my-medium.cnf /etc/my.cnf
chown -R mysql .
chgrp -R mysql .
# 安装MySQL数据库
scripts/mysql_install_db --user=mysql
# 更新安装权限
chown -R root .
chown -R mysql data
设置MySQL管理员密码
默认情况下,root用户的密码为空,在安装完成后需要立刻设置root密码。
mysql -u root mysql
进入MySQL客户端,执行以下命令来改变root用户的密码。
mysql> SET PASSWORD FOR root@localhost=PASSWORD('secret');
启动和停止MySQL
MySQL服务器守护进程通过位于INSTALL-DIR/bin目录的一个程序来控制。
- 在Linux中启动MySQL
负责启动MySQL守护进程的脚本名为mysqld_safe
,位于INSTALL-DIR/bin目录。此脚本只能由拥有足够执行权限的用户执行,一般为root或mysql组的成员。mysqld_safe脚本实际上是包装mysqld服务器守护进程的包装器,提供了直接调用mysqld所没有的特性,如运行时日志和出现错误时的自动重启。
./bin/mysqld_safe --user=mysql &
- 在Linux中停止MySQL
虽然MySQL服务器守护进程只能由拥有必要文件系统权限的用户启动,却可以由拥有MySQL权限数据库中指定的适当权限的用户停止。此权限一般只留给MySQL root用户(注意,不要和操作系统的root用户混淆)。
mysqladmin -u root -p shutdown
Enter password: ******
配置和优化MySQL
除非特别指定,在每次启动MySQL服务器守护进程时使用一组默认的配置设置。下面介绍一些常用的配置和优化。
- 查看MySQL的配置参数
mysqladmin -u root -p variables
# 或者登陆MySQL客户端后执行
mysql> SHOW VARIABLES;
# 通过LIKE子句查看单个变量的值,例如,查看默认的存储引擎是什么
mysql> SHOW VARIABLES LIKE 'storage_engine';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+
1 row in set (0.00 sec)
# 查看一些非常有意义的统计信息,也可以使用LIKE
SHOW STATUS
- 管理连接负载
优化的MySQL服务器能够同时处理许多连接,每个连接都必须由MySQL主线程接收并委托给一个新线程,但是这个任务不是立即就能完成。back_log
参数确定在主线程处理新连接时允许排队的连接数,默认值为50。
- 设置数据目录位置
将MySQL数据目录放在非标准的位置(例如,另一个磁盘分区)是一种常见的做法。通过datadir
选项可以重新定义此路径。
./bin/mysqld_safe --datadir=/data/mysql --user=mysql &
注意:需要将mysql表的定义(存储在DATADIR/mysql中)复制或移动到此新位置,因为MySQL的数据库以文件形式存储,所以可以使用通常的操作系统命令(例如,mv和cp)来完成。
- 设置默认的存储引擎
指定如下选项之后,所有后续表的创建将自动使用MEMORY引擎,除非指定了其他表引擎。
./bin/mysqld_safe --default-table-type=memory
- 自动执行SQL命令
./bin/mysqld_safe --init_file=/usr/local/mysql/scripts/mysqlinitcmds.sql &
- 设置最大允许的并发连接数
max_connections
参数确定并发数据库连接的最大数,默认设置为100。
mysql> show status like '%max%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Innodb_row_lock_time_max | 0 |
| Max_used_connections | 7 |
| Tc_log_max_pages_used | 0 |
+--------------------------+-------+
3 rows in set (0.00 sec)
- 设置MySQL的通信端口
默认情况下,MySQL在端口3306通信,但是,可以通过port参数重新配置以监听其他任何端口。
my.cnf文件
除了通过mysqld_safe启动MySQL守护进程时通过参数选项来修改MySQL配置,还可以通过修改my.cnf配置来实现配置修改。启动时,MySQL将在一些目录中查找my.cnf文件,每个目录将确定在其中声明的参数的作用域。
- /etc/my.cnf是全局配置文件
- DATADIR/my.cnf是服务器特定的配置
- –defaults-extra-file=name,这个文件由给出的文件名指定,包括绝对路径
- ~/.my.cnf是用户特定的配置
MySQL在启动时会尝试从上述各个位置读取配置文件,如果存在多个配置文件,后面读取的参数将覆盖之前的参数。虽然可以创建自己的配置文件,不过应当基于5个预配置的my.cnf文件之一来创建,这个5个文件都由MySQL分发包提供。这些模板位于INSTALL-DIR/support-files。
MySQL客户端
MySQL提供了很多使用的客户端工具。
mysql客户端
mysql客户端可以采用交互模式
和非交互模式
。
# 交互模式
# 注意,密码不要包含在命令行中,否则会被记录到历史命令里,有安全风险
mysql -h hostname -u username -p -D databasename
# 非交互模式(批处理模式)
# 向数据库导入模式和数据,通过<操作符使mysql客户端使用/path/to/file的内容来执行文本文件中的SQL命令
mysql [options] < /path/to/file
非交互模式下的一个例子:监视服务器上发生的慢查询数量
# mysqlmon.sql
SHOW STATUS LIKE "slow_queries";
# 类似下面的输出
mysql> SHOW STATUS LIKE "slow_queries";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries | 0 |
+---------------+-------+
1 row in set (0.01 sec)
# 在crontab中执行如下命令
0 3 * * * mysql -u monitor < mysqlmon.sql | mail -s "Slow queries" gerry@example.com
mysqladmin客户端
此客户端用于完成一些管理任务。比如,创建和删除数据库,监视服务器状态,关闭MySQL服务器守护进程等。
# 查看服务器变量及其值
root@gerryyang:~# mysqladmin -u root -p variables
Enter password:
+---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value |
+---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
| autocommit | ON |
| automatic_sp_privileges | ON |
| back_log | 50
......
+---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+
# 使用processlist命令显示所有正在运行的MySQL服务器进程列表
root@gerryyang:~# mysqladmin -u root -p processlist
Enter password:
+-------+------+-----------+----+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-------+------+-----------+----+---------+------+-------+------------------+
| 95327 | root | localhost | | Sleep | 744 | | |
| 95330 | root | localhost | | Query | 0 | | show processlist |
+-------+------+-----------+----+---------+------+-------+------------------+
mysqldump
此客户端用来从MySQL服务器中导出现有的表数据
或表结构
,或者二者都导出。
# 将本地服务器中所有数据库的表结构转储到文件output.sql
mysqldump -u root -p --all-databases --no-data > output.sql
# 转储一个数据库corporate的数据
mysqldump -u root -p --no-create-info corporate > output.sql
# 同时转储corporate数据库中两个表的结构和数据
# 在每个`CREATE`语句前都包括了`DROP TABLE`语句,当需要重复地重新创建存在的数据库时特别有用,可以防止尝试创建已经存在的表导致的错误
mysqldump -u root -p --add-drop-table corporate product staff > output.sql