MySQL (简体中文)
MySQL是一个广泛使用的多线程多用户式数据库。具体特性请参看官方网站。
Contents
安装
Archlinux 选择的 MySQL 实现被称为 MariaDB。 安装位于官方软件源的mariadb、libmariadbclient 和 mariadb-clients 软件包。 其它实现有 percona-server 和 Oracle mysqlAUR。
安装Maria软件包之后,你必须运行下面这条命令:
# mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
启动 mysqld
守护进程,运行安装脚本,然后重新启动守护进程:
# systemctl start mysqld # mysql_secure_installation # systemctl restart mysqld
可用的前端有 mysql-gui-toolsAUR 和 mysql-workbench。
由 Oracle MySQL 升级到 MariaDB
想要切换的用户需要安装 mariadb,libmariadbclient 以及 mariadb-clients,然后执行 mysql_upgrade 来迁移系统:
# systemctl stop mysqld # pacman -S mariadb libmariadbclient mariadb-clients # systemctl start mysqld # mysql_upgrade -p
升级
升级了 MySQL 并启动之后,要运行这条命令:
# mysql_upgrade -u root -p
配置
一旦你启动了MySQL服务器,你最好增加一个root账号来维护你的MySQL用户和数据库。如上面的初始化脚本输出的信息里所述,有手动或自动完成两种方法 ── 可以运行命令来设置root账号的密码,或者运行安全安装脚本。
现在可以使用你偏好的交互方式来进行进一步配置。例如可以用MySQL的命令行工具,以root账号登录你的MySQL服务器:
$ mysql -p -u root
禁用远程访问
MySQL 服务器默认可从网络访问。如果只有本机需要 MySQL,可以通过不监听 TCP 端口 3306 来增强安全性。要拒绝远程连接,取消注释 /etc/mysql/my.cnf
中以下这行:
skip-networking
你仍能从本机登录。
启用自动完成
MySQL 默认禁用客户端自动完成功能。要在整个系统中启用它,编辑 /etc/mysql/my.cnf
,将 no-auto-rehash
替换为 auto-rehash
。下次启动客户端时启用自动完成。
备份
数据库可以转储到文件以简化备份。以下 shell 脚本会替你在脚本所在目录创建一个 db_backup.gz
文件,包含数据库的转储:
#!/bin/bash THISDIR=$(dirname $(readlink -f "$0")) mysqldump --single-transaction --flush-logs --master-data=2 --all-databases \ | gzip > $THISDIR/db_backup.gz echo 'purge master logs before date_sub(now(), interval 7 day);' | mysql
参见 MySQL 手册的官方 mysqldump
页面。
故障排除
MySQL 守护进程无法启动
如果 MySQL 无法启动且日志文件中没有任何信息,你可能需要检查 /var/lib/mysql
和 /var/lib/mysql/mysql
目录中文件的权限。如果这些目录中文件的所有者不是 mysql:mysql
,你应该这样做:
# chown mysql:mysql /var/lib/mysql -R
如果你仍旧碰到了权限问题,确保已把 my.cnf
拷贝到 /etc/
目录:
# cp /etc/mysql/my.cnf /etc/my.cnf
然后尝试重新启动守护进程。
如果文件 /var/lib/mysql/hostname.err
中有如下错误:
[ERROR] Can't start server : Bind on unix socket: Permission denied [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ? [ERROR] Aborting
/var/run/mysqld
的权限可能是罪魁祸首:
# chown mysql:mysql /var/run/mysqld -R
如果运行 mysqld 时出现了如下错误:
Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist
在 /usr
目录中运行下列命令来安装默认的表:
# cd /usr # mysql_install_db --user=mysql --ldata=/var/lib/mysql/
执行 mysql_upgrade 后 MySQL 不能启动
试试安全模式下运行的 MySQL:
# mysqld_safe --datadir=/var/lib/mysql/
然后再运行:
# mysql_upgrade -u root -p
重置 root 密码
停止 mysqld 守护进程,再执行以下命令:
# mysqld_safe --skip-grant-tables &
连接到 MySQL 服务器,执行以下命令:
# mysql -u root mysql
修改 root 密码:
mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; mysql> FLUSH PRIVILEGES; mysql> exit
再启动 mysqld 守护进程。
检查并修复所有数据表
检查并自动修复所有数据库中的所有表,查看更多
# mysqlcheck -A --auto-repair -u root -p
更多资源
- LAMP_(简体中文) - Arch wiki 文章,涵盖安装 LAMP 服务器 (Linux Apache MySQL PHP)
- http://mariadb.org/ - Community-driven 实现
- http://www.mysql.com/ - Oracle 实现
- http://www.percona.com/software - Percona 实现