一、 目标
笔者所要处理的问题是,在几台linux虚拟机上安装mysql,但虚拟机是共享的,不能破坏全局环境而影响到其他用户的使用,因此必须在特定的个人目录下安装mysql。另外有些虚拟机上已经安装有mysql,并且启动了服务,所以,安装的mysql的配置不能跟原有的mysql冲突,如监听的端口号、mysql.sock文件的位置、数据目录(datadir)等。
mysql.sock是mysql的主机和客户机在同一host上的时候,使用unix domain socket做为通讯协议的载体,它比tcp快。
mysql有两种连接方式:
(1) TCP/IP
(2) socket
对mysql.sock来说,其作用是程序与mysqlserver处于同一台机器,发起本地连接时可用。例如你无须定义连接host的具体IP得,只要为空或localhost就可以。在此种情况下,即使你改变mysql的外部port也是一样可能正常连接。因为你在my.ini中或my.cnf中改变端口后,mysql.sock是随每一次 mysql server启动生成的。已经根据你在更改完my.cnf后重启mysql时重新生成了一次,信息已跟着变更。 而对于外部连接,必须是要变更port才能连接的。
linux下安装mysql连接的时候经常回提示说找不到mysql.sock文件,解决办法很简单:
如果是新安装的mysql,提示找不到文件,就搜索下,指定正确的位置;如果mysql.sock文件误删的话,就需要重启mysql服务,如果重启成功的话会在datadir目录下面生成mysql.sock 到时候指定即可;如果还不行就选择用TCP连接方式连接就行了,其实windows下还支持管道连接方式。
二、 基本步骤
a) 下载安装包
笔者是从官方网站上下载的安装包:
http://dev.mysql.com/downloads/mysql/
当时最新版本是mysql-5.6.13.tar.gz;
可以下载后上传到linux虚拟机中,也可直接在linux下通过命令下载:
# wget http://dev.mysql.com/downloads/mysql-5.6.13.tar.gz
b) 安装必须的软件和依赖包(注:对于依赖的软件和包,因为属于公用的,所以没有再安装在本地)
i. mysql从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具。因此,我们首先要在系统中安装cmake工具。
# wget http://www.cmake.org/files/v2.8/cmake-2.8.11.2.tar.gz
# tar zxvf cmake-2.8.11.2.tar.gz
# cd cmake-2.8.11.2
# ./ bootstrap
# make
# make install
ii. 通过 rpm -qa | grep name 的方式验证以下软件包是否已全部安装。
gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel* libgcrypt* libtool*
如果缺少相关的软件包,可通过yum -y install的方式在线安装,或下载相关rpm包并通过rpm -ivh 的方式安装。
c) 安装前的系统设置
建立mysql安装目录及数据存放目录
# mkdir -p /data/qiuzl/software/public/usr/local/mysql (安装目录)
# mkdir -p /data/qiuzl/software/public/data (数据目录)
# mkdir -p /data/qiuzl/software/public/tmp (mysql.sock文件的位置)
创建用户和用户组(有些虚拟机上已经创建好了组和用户,可以直接用)
# groupadd mysql (创建mysql组)
# useradd -g mysql mysql (创建mysql用户)
赋予数据存放目录权限
# chown mysql:mysql -R /data/qiuzl/software/public/data
# chown mysql:mysql -R /data/qiuzl/software/public/tmp
d) 编译安装
大多数人都已经习惯了之前的configure方式,并且所使用的参数也是比较个性化的,换成cmake之后,这一方面会带来不少的麻烦。mysql的官方网站提供了二者的参数对照表,我们可以尽可能的保留之前的参数,来编译配置新的mysql版本。
configure 与 cmake 参数对照指南:
http://dev.mysql.com/doc/internals/en/autotools-to-cmake.html
抱着就简的心态,笔者只对基本目录进行了配置,其余的配置放在my.cnf文件中来实现;
# tar zxvf mysql-5.6.13.tar.gz
# cd mysql-5.6.13
# cmake . -DCMAKE_INSTALL_PREFIX=/data/qiuzl/software/public/usr/local/mysql/ -DMYSQL_UNIX_ADDR=/data/qiuzl/software/public/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DMYSQL_DATADIR=/data/qiuzl/software/public/data
# make
# make install
在make与make install的时候可以看到进度百分比,这一点要比configure方式要好。
e) 初始化数据库
# cd /data/qiuzl/software/public/usr/local/mysql
#./scripts/mysql_install_db --basedir=/data/qiuzl/software/public/usr/local/mysql/ --datadir=/data/qiuzl/software/public/data/ --explicit_defaults_for_timestamp=true --user=mysql --collation-server=utf8_general_ci
成功后会输出下面的提示:
︙
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/data/qiuzl/software/public/usr/local/mysql//bin/mysqladmin -u root password 'new-password'
/data/qiuzl/software/public/usr/local/mysql//bin/mysqladmin -u root -h localhost.localdomain password 'new-password'
Alternatively you can run:
/data/qiuzl/software/public/usr/local/mysql//bin/mysql_secure_installation
which will also give you the option of removing the test databases and anonymous user created by default. This is strongly recommended for production servers.
See the manual for more instructions.
You can start the MySQL daemon with:
cd . ; /data/qiuzl/software/public/usr/local/mysql//bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd mysql-test ; perl mysql-test-run.pl
Please report any problems with the ./bin/mysqlbug script!
The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
WARNING: Found existing config file /data/qiuzl/software/public/usr/local/mysql//my.cnf on the system.
Because this file might be in use, it was not replaced, but was used in bootstrap (unless you used --defaults-file) and when you later start the server.
The new default config file was created as /data/qiuzl/software/public/usr/local/mysql//my-new.cnf, please compare it with your file and take the changes you need.
从上面的输出中,我们可以看到要进行下一步的提示。其中如果不加--collation-server=utf8_general_ci,则会报下面的错误:
[ERROR] COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8'
这是因为一开始cmake运行时即配置了字符:
-DDEFAULT_CHARSET=utf8
若不加--explicit_defaults_for_timestamp=true,则会报下面的错误:
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
f) my.cnf配置文件
在/data/qiuzl/software/public/usr/local/mysql下创建my.cnf文件,并在输入下面的内容:
[mysqld]
port = 3307
basedir = /data/qiuzl/software/public/usr/local/mysql/
datadir = /data/qiuzl/software/public/data/
innodb_data_file_path = ibdata1:10M:autoextend
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
explicit_defaults_for_timestamp=true
server_id = 1
g) 启动mysql服务器
有多种方式启动:
mysqld sql后台程序(即mysql服务器)。要想使用客户端程序,该程序必须运行,因为客户端通过连接服务器来访问数据库。
mysqld-max 包括更多特性的一个服务器版本。
mysqld_safe 服务器启动脚本。如果mysqld-max存在,mysqld_safe试图启动它,否则启动mysqld。
mysql.server 服务器启动脚本。该脚本用于使用包含为特定级别的运行启动服务的脚本的运行目录的系统。它调用mysqld_safe来启动mysql服务器。
mysqld_multi 服务器启动脚本,可以启动或停止系统上安装的多个服务器。
笔者采用的是用mysqld_safe来启动:
#./bin/mysqld_safe --defaults-file=./my.cnf --user=mysql --collation-server=utf8_general_ci &
启动日志会写入/data/qiuzl/software/public/data/localhost.localdomain.err中,可以从中了解启动情况;
也可以通过命令来查看当前服务器是否正在运行:
# ps aux | grep mysqld
为root帐户设置初始密码
# /data/qiuzl/software/public/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
通过命令行登录管理MySQL服务器(提示输入密码时直接回车):
# /data/qiuzl/software/public/usr/local/mysql/bin/mysql -u root -p'new-password'
mysql>use mysql; //选择系统数据库mysql
mysql>grant all privileges on *.* to 'admin'@'localhost' identified by 'password';//创建一个具有root权限的用户和密码
mysql>grant all privileges on *.* to 'admin'@'127.0.0.1' identified by 'password'; //创建一个具有root权限的用户和密码
mysql>select Host,User,Password from user; //查看所有用户
mysql>exit;
三、 总结
笔者并没有把启动加入到/etc/init.d/目录中,开机时不会自动启动服务器,原因是虚拟机不会关闭,也即开启的mysql服务器不会随着用户的退出而关闭。
整个安装过程其实不是特别麻烦,关键在于要了解mysql的安装配置以及启动流程。本文的重点则是在于讲述整个安装的过程,期间也会遇到一些问题,但通过网上查找的资料基本都能解决。希望这次经验能给大家以启示。
参考资料:
http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html
http://heylinux.com/archives/993.html
http://blog.chinaunix.net/uid-13642598-id-3153537.html
http://dev.mysql.com/doc/internals/en/autotools-to-cmake.html