在Solaris 10环境下部署MySQL 5.1,虽然看似是旧版本操作,但实际执行过程中仍会遇到不少隐蔽问题。本文完整梳理了二进制分发包的安装流程,并整理了常见错误处理与远程连接权限配置方法,供运维人员参考。
安装步骤
以root账户登录系统,依次执行以下操作。
1. 从dev.mysql.com官方站点下载安装文件mysql-5.1.11-beta-solaris10-sparc-64bit.pkg.gz,存放至/tmp目录。
2. 解压gz格式的安装包:
gunzip mysql-5.1.11-beta-solaris10-sparc-64bit.pkg.gz
3. 创建mysql用户组及mysql用户,并为其指定主目录:
groupadd mysql
useradd -g mysql mysql
mkdir /export/home/mysql
chgrp mysql /export/home/mysql
chown mysql /export/home/mysql
usermod -d /export/home/mysql mysql
可通过su - mysql命令验证mysql用户能否正常登录。
4. 安装pkg包:
pkgadd -d mysql-5.1.11-beta-solaris10-sparc-64bit.pkg
MySQL程序会被安装到/opt/mysql/mysql/路径下。
5. 安装后的必要设置:建立软链接和配置文件。
cd /usr/local
ln -s /opt/mysql/mysql/ mysql
创建配置文件/etc/my.cnf,内容如下:
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
6. 初始化MySQL数据库:
cd /usr/local/mysql
scripts/mysql_install_db --user=mysql
7. 启动MySQL服务(切换至mysql用户执行):
/usr/local/mysql/bin/mysqld-max &
或使用:
/usr/local/mysql/bin/mysqld-max --user=mysql&
注意:root用户不得直接启动MySQL服务器。
8. 关闭服务器:
mysqladmin -u-root shutdown
9. 卸载MySQL(root用户执行):
pkgrm mysql
相比源码编译安装,采用二进制分发包安装MySQL更为简便。然而官方安装手册并未涵盖所有可能出现的报错。例如,曾遇到的典型错误信息:
/opt/mysql/mysql/bin/mysqld-max: Table 'mysql.general_log' doesn't exist
060716 10:50:16 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
该错误的根本原因是未创建/etc/my.cnf配置文件。此外,pkg包安装时会自动为MySQL相关目录设置权限,无需像手册所述手工调整。
权限配置与远程连接
在MySQL配置过程中,直接修改授权表来设定用户权限是一种重要手段。
默认情况下MySQL禁止远程连接,需要修改权限设置。以下提供两种方法:
方法一:使用GRANT语句。
mysql> GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'something' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY 'something' WITH GRANT OPTION;
第一句新增一个仅允许本地(localhost)登录的root用户,密码为“something”。第二句利用通配符%授权root用户可从任意主机远程访问。
方法二:直接使用UPDATE语句修改user表。
update user set host='localhost' where user='root';
flush privileges; // 仅允许root在本机登录
update user set host='%' where user='root';
flush privileges; // 允许root远程访问
另外,MySQL 4.1及以上版本对密码哈希算法进行了更改,可能导致使用旧协议客户端连接失败,并出现如下错误提示:1251 Client does not support authentication protocol requested by server; consider upgrading MySQL client。处理方式如下:
mysql> UPDATE mysql.user SET password = OLD_PASSWORD('yourpwd') WHERE host = 'yourhost' AND user='username';
mysql> FLUSH PRIVILEGES;