linux下安装MySQL主要有两种方法:
第一种是通过源码自行编译安装,这种适合高级用户定制MySQL的特性,这里不做说明。
第二种是通过编译过的二进制文件进行安装。二进制文件安装的方法又分为两种:一种是不针对特定平台的通用安装方法,使用的二进制文件是后缀为.tar.gz的压缩文件;另一种是使用RPM或其他包进行安装,这种安装进程会自动完成系统的相关配置,所以比较方便。
RPM安装包安装
安装包
安装包安装需要如下的两种rpm安装包:
MySQL-server-5.5.31-2.el6.i686.rpm
MySQL-client-5.5.31-2.el6.i686.rpm
安装步骤
检查是否有mysql服务
检查是否已经安装了mysql,其中grep -i表示匹配时候忽略大小写
#rpm -qa|grep -i mysql
如果已经安装了库文件,应该先卸载,不然会出现覆盖错误。注意卸载的时候使用–nodeps选项,忽略依赖关系:
#rpm -e mysql-libs-5.1.61-4.el6.x86_64 --nodeps
安装Mysql服务端软件,注意切换到Root用户
#rpm -ivh MySQL-server-5.5.29-2.el6.x86_64.rpm
安装完成后,安装进程会在linux中添加一个mysql组,以及属于mysql组的mysql用户,可以使用id命令来查看
#id mysql
uid=496(mysql)gid=493(mysql) groups=493(mysql)
mysql服务端安装之后虽然配置了相关文件,但是并没有自动启动mysqld服务,需要手动启动:
#service mysql start
Starting MySQL.. SUCCESS!
启动后,可以通过检查3306端口是否开启来查看mysql服务是否正常启动
#netstat -anp|grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 34693/mysqld
安装mysql客户端软件
#rpm -ivh MySQL-client-5.5.29-2.el6.x86_64.rpm
如果安装成功应该可以运行mysql命令,注意必须是mysqld服务以及开启:
#mysql
即可进入页面
为新数据库设置密码
第一次登陆mysql为mysql设置密码:
/usr/bin/mysqladmin -uroot password 123456
修改密码语法:
mysqladmin -u用户名 -p旧密码 password 新密码
通用方法安装
安装包
通用方法安装需要如下的安装包
mysql-5.5.29-linux2.6-x86_64.tar.gz
安装步骤
检查是否有mysql服务
检查是否已经安装了mysql,其中grep -i表示匹配时候忽略大小写
#rpm -qa|grep -i mysql
如果已经安装了库文件,应该先卸载,不然会出现覆盖错误。注意卸载的时候使用–nodeps选项,忽略依赖关系:
#rpm -e mysql-libs-5.1.61-4.el6.x86_64 --nodeps
添加mysql用户和mysql组
添加mysql组和mysql用户,用于设置mysql安装目录文件所有者和所属组。
#groupadd mysql
#useradd -r -g mysql mysql
*useradd -r参数表示mysql用户是系统用户,不可用于登录系统。
解压mysql文件
将二进制文件解压到指定的安装目录,我们这里指定为/usr/local
#cd /usr/local/
#tar -zxvf /path/to/mysql-5.5.29-linux2.6-x86_64.tar.gz
#mv mysql-5.5.29-linux2.6-x86_64 mysql
改变mysql目录所属的组和用户
#cd mysql
#chown -R mysql .
#chgrp -R mysql .
进入mysql文件夹,并更改所属的组和用户
执行安装脚本
执行mysql_install_db脚本,对mysql中的data目录进行初始化并创建一些系统表格。
注意mysql服务进程mysqld运行时会访问data目录,所以必须由启动mysqld进程的用户执行这个脚本,或者root用户执行,但是加上参数–user=mysql
#scripts/mysql_install_db --user=mysql
如果mysql的安装目录(解压目录)不是/usr/local/mysql,那么还必须指定目录参数,如下:
#scripts/mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
将mysql/目录下除了data/目录的所有文件,改回root用户所有,mysql用户只需作为mysql/data/目录下所有文件的所有者。
# chown -R root .
# chown -R mysql data
复制配置文件my.cnf
cp support-files/my-medium.cnf /etc/my.cnf
将mysqld服务加入开机启动项
首先需要将scripts/mysql.server服务脚本复制到/etc/init.d/,并重命名为mysqld。
# cp support-files/mysql.server /etc/init.d/mysqld
通过chkconfig命令将mysqld服务加入到自启动服务项中。
# chkconfig --add mysqld
注意服务名称mysqld就是我们将mysql.server复制到/etc/init.d/时重命名的名称。
查看是否添加成功
#chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
重启系统,mysqld就会自动启动了,检查是否启动
# netstat -anp|grep mysqld
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2365/mysqld
unix 2 [ ACC ] STREAM LISTENING 14396 2365/mysqld /tmp/mysql.sock
如果不想重新启动,那可以直接手动启动。
# service mysqld start
Starting MySQL.. SUCCESS!
配置环境变量
MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
然后使用source /etc/profile来使环境变量立即生效,然后使用mysql启动客户端程序!
扩展
查看数据库的字符集编码
使用如下命令可以看到mysql字符集编码
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
这儿建议在创建数据库和数据库表的时候设置编码,这样保证后面不会出现乱码的问题,修改配置文件,新建或者拷贝一份:
cp /usr/share/mysql/my-small.cnf /etc/my.cnf
修改为如下内容:
[client]
default_character_set=utf8
[mysqld]
character_set_server=utf8
# 5.5版本以后使用character_set_server
# 5.5之前使用default_character_set
init_connect='SET NAMES utf8'
重启mysql服务,再重新查看编码,就会发现所有的都变成了utf-8编码
service mysql/mysqld restart
# mysqld是5.5版本一下的启动方式
设置mysql可以让外网能够访问
使用root权限登录mysql,更新mysql.user表,设置指定用户的host字段为%,默认的为127.0.0.1或者localhost。
mysql.user中的host字段说明:
% 允许从任何ip地址登录
x.x.x.x 允许从指定的ip地址访问
步骤如下:
use mysql;
select host,user from user;
update user set host='%' where user ='root';
select host,user from user;
flush privileges;
如此,就可以访问从其他ip地址访问mysql