很多linux中自带的mysql版本是5.1,最近由于需要使用新版本特性,必须升级。
网上很多升级方法都是建议下载rpm包后使用yum升级,但这种方法必须上网下载升级包,而且由于网络不稳定或下载的镜像文件找不到,通常不顺利。
经过本次的实践摸索,成功使用tar包进行升级,现分享:
1、备份
停止mysql
/etc/init.d/mysqld stop
备份数据库文件: 看my.cnf下配置的data文件目录,一般是放到 /var/lib/mysql/,复制 /var/lib/mysql/下的数据库文件到安全的目录
cp -r /var/lib/mysql /home/workflow/mysqlbak/
再将 /etc/my.cnf备份一下,然后删除
mv /etc/my.cnf /home/workflow/mysqlbak/
2、删除
rpm -e mysql //普通删除模式
rpm -e --nodeps mysql // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除删除后,/usr/local/mysql目录将被删除
3、安装
安装有两种方式,一种是编译方式,一种为非编译方式,编译方式只需从官网下载一个几十M的源文件,但编译时间需要20分钟左右。非编译方式则需从官网下载一个300M左右已编译好的包,但免除了安装gcc等编译环境的烦恼
3.1) 非编译方式
下载Generic版本,有64和32位的
下载后可以拷贝到/usr/local/目录下,解压,然后将目录名改成mysql就好,例如使用5.6.20版
tar zxvf /home/mysql-5.6.20-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
mv /usr/local/mysql-5.6.20-linux-glibc2.5-x86_64/ /usr/local/mysql
3.2) 编译方式
安装编译代码需要的包:
yum -y install make gcc-c++ cmake bison-devel ncurses-devel
如果报以下错误:
到下面的网站下载bison-devel-2.4.1-5.el6.x86_64.rpm
yum localinstall bison-devel-2.4.1-5.el6.x86_64.rpm
然后重新运行yum -y install make gcc-c++ cmake bison-devel ncurses-devel 即成功了
下载:
wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.19.tar.gz
tar xvf mysql-5.6.19.tar.gz
cd mysql-5.6.19
编译
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make && make install
4、初始化配置
使用下面的命令查看是否有mysql用户及用户组
cat /etc/passwd 查看用户列表
cat /etc/group 查看用户组列表
如果没有就创建
groupadd mysql
useradd -g mysql mysql
修改/usr/local/mysql权限
chown -R mysql:mysql /usr/local/mysql
先将etc/my.cnf 删除
cd /usr/local/mysql
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
若不行,则 chmod -R 777 /usr/local/mysql
cp support-files/mysql.server /etc/init.d/mysqld
添加服务,拷贝服务脚本到init.d目录,并设置开机启动
--注册服务:chkconfig mysqld on
-- 使用服务方式启动service mysqld start --启动MySQL
也可以不注册,直接使用 /etc/init.d/mysqld start启动
启动mysql:
mysql -uroot
若报找不到命令,则需添加系统路径
# vim /etc/profile
在最后,添加:
PATH=/usr/local/mysql/bin:$PATH
export PATH
或者用alias mysql=’/usr/local/mysql/bin/mysql’
保存,退出,然后运行:
#source /etc/profile
不报错则成功。
mysql -uroot
mysql> SET PASSWORD = PASSWORD('passwrod');
设置远程访问的用户:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'passwrod' WITH GRANT OPTION;
FLUSH PRIVILEGES;
然后查看,
SELECT host FROM mysql.user WHERE User = 'root';
看是否有显示%
拷贝备份的my.cnf回到/etc/my.cnf
使用原my.cnf文件后可能要进行的修改:
如果原来[mysqld]下有skip-locking,需要注释,5.6不支持
如果原来[mysqld]下有default-character-set,需要改成character_set_server
若data文件在默认的/usr/local/mysql文件夹中,则需要拷贝回去
/bin/cp -rf /home/pan/mysqlbak/mysql /usr/local/mysql/data/
chgrp -R mysql /usr/local/mysql/data/ && chown -R mysql /usr/local/mysql/data/
若data文件在其他目录,例如/var/lib/,则需要将/usr/local/mysql/data 拷贝过去,然后还原
mv /var/lib/mysql /home/workflow/mysqlbak/
mkdir /var/lib/mysql
chmod -R 777 /var/lib/mysql
cp -r /usr/local/mysql/data/* /var/lib/mysql/
chmod -R 777 /var/lib/mysql
启动mysql,即完成