24.Mysql高级安装和升级
24.1 Linux/Unix平台下的安装
24.1.1 安装包比较
Linux下的Mysql安装包分为RPM包、二进制包、源码包3种。
RPM包优点是安装简单,适合初学者;缺点是默认路径不能修改,服务端和客户端分别安装,一台服务器只能安装一个Mysql。
RPM包文件布局:/usr/bin/mysql客户端程序和脚本,/usr/sbin/mysqld服务器,/var/lib/mysql日志文件和数据库,
/usr/share/doc/packages文档,/usr/include/mysql头文件,/usr/lib/mysql库文件,
/usr/share/mysql错误日志和字符集文件,/usr/share/sql-bench基准程序。
二进制包优点是安装简单,可以安装至任何路径下,一台服务器可以安装多个Mysql;缺点是性能不如源码编译的好,不能指定编译参数。
二进制包文件布局:bin客户端程序和mysqld服务器,data日志文件和数据库,
docs文档,include头文件,lib库文件,scripts安装脚本,
share/mysql错误日志和字符集文件,sql-bench基准程序。
源码包优点是按需定制编译,性能好,一台服务器可安装多个Mysql;缺点是安装过程复杂,需要手动编译。
源码包文件布局:bin客户端程序,libexec mysqld服务器,var日志文件和数据库,
info文档,include/mysql 头文件,lib/mysql 库文件,
share/mysql错误日志和字符集文件,sql-bench基准程序。
24.1.2 安装RPM包
分别下载客户端和服务端rpm包,文件名格式:
Mysql-包类型(server或client)-版本类型(社区版或企业版)-版本号-0.操作系统类型.cpu类型.rpm
安装命令:rpm -ivh 文件名
说明:
-i install 安装
-v verbose 输出信息
-h hash 安装进度
例子:
rpm -ivh MySQL-server-community-5.7.24-0.centos.i386.rpm
rpm -ivh MySQL-client-community-5.7.24-0.centos.i386.rpm
24.1.3 安装二进制包
增加mysql用户和组:
# groupadd mysql
# useradd -g mysql mysql
解压并创建软连接:
# tar -xzvf /home/mysql/mysql-VERSION-OS.tar.gz
# ls -s mysql-VERSION-OS mysql
在数据目录下创建系统数据库和系统表,--user用来指定创建库和表的所有者
# cd mysql
# scripts/mysql_install_db --user=mysql
设置目录权限,将data目录owner改为mysql,其它目录和文件owner为root
# chown -R root:mysql
# chown -R mysql:mysql data
启动Mysql
# bin/mysqld_safe --user=mysql &
24.1.4 安装源码包
增加mysql用户和组:
# groupadd mysql
# useradd -g mysql mysql
解压源码包并进去解压后的目录:
# tar -xzvf /home/mysql/mysql-VERSION-OS.tar.gz
# gunzip < mysql-VERSION-OS.tar.gz |tar -xvf -
# cd mysql-VERSION-OS
使用configure工具编译,并指定安装目录
# ./configure --prefix=/usr/local/mysql
# make
# make install
设置配置文件/etc/my.cnf
在数据目录下创建系统数据库和系统表,--user用来指定创建库和表的所有者
# cd /usr/local/mysql
# bin/mysql_install_db --user=mysql
设置目录权限,将var目录owner改为mysql,其它目录和文件owner为root
# chown -R root .
# chown -R mysql var
# chgrp -R mysql .
启动Mysql
# bin/mysqld_safe --user=mysql &
24.1.5 参数设置方法
mysql参数文件my.cnf可以被放置在多个路径,
搜索顺序为/etc/my.cnf --> $MYSQL_HOME/my.cnf --> 用--defaults-extra-file=path指定的文件 --> ~/.my.cnf ,
搜索顺序靠后的文件参数会覆盖靠前的文件参数,避免歧义建议只保留/etc/my.cnf。
参数设置方法分为3种:
session级:只对本session有效,新连接无效
mysql> set param_name=value;
global级:对所有连接有效,重启mysql失效
mysql> set global param_name=value;
文件级:重启后生效
修改my.cnf文件,并重启mysql。
24.2 源码包安装的性能考虑
24.2.1 去掉不需要的模块
查看编译配置所有选项:
# ./configure -help
不安装服务端(只安装客户端):
# ./configure --without-server
修改安装路径(默认安装路径/usr/local)
# ./configure --prefix=/usr/local/mysql
只修改数据文件路径(mysql其它内容仍在默认安装路径)
# ./configure --prefix=/usr/local localstatedir=/usr/local/mysql/data
修改socket的默认位置:
# ./configure --with-unix-scoket-path=/usr/local/mysql/tmp/mysql.sock
24.2.2 只选择要使用的字符集
修改默认字符集:
# ./configure --with-charset=CHARSET
修改默认排序规则:
# ./configure --with-collation=COLLATION
扩展字符集(只安装需要的字符集):
# ./configure --with-extra-charsets=LIST|complex|all
说明:
LIST指以空格分隔的一组字符集名称;
complex指不能动态装载的所有字符集;
all指所有字符集。
24.2.3 使用静态编译以提高性能
# ./configure --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static
说明:
--with-client-ldflags=-all-static 以纯静态方式编译客户端
--with-mysqld-ldflags=-all-static 以纯静态方式编译服务端
24.3 升级Mysql
升级时原数据库停止DML操作,并保证字符集一致。
思路:先安装新版本数据库,从原数据库导出数据和表结构,再导入到新数据库中。
方法1:通过管道导出导入数据库
先安装新版本数据库,并创建同名数据库(模式)
mysql> create database db_name;
导出原数据库数据和表结构
# mysqldump --opt db_name > filename
在新数据库导入
mysql -h hostname -p port -u user -p password db_name < filename
通过管道一次导入导出
# mysqldump --opt db_name | mysql -h hostname -p port -u user -p password db_name
说明:
--opt 表示采用优化方式进行导出,如--compress压缩。
升级权限表#mysql_fix_privilege_tables
重启mysql。
方法2:使用--tab的方式导出导入数据库
#mkdir dumpdir 创建导出目录
#mysqldump --tab=dumpdir db_name 导出文件不是SQL,而是建表语句和数据纯文本
#mysqladmin create database db_name 创建新的数据库
#cat dumpdir/*.sql | mysql db_name 执行建表语句
#mysqlimport db_name dumpdir/*.txt 加载数据
#mysql_fix_privilege_tables 升级权限表
重启mysql。
方法3:MyISAM存储引擎可直接拷贝数据文件
从原数据库拷贝.frm\.MYD\.MYI文件到新数据库即可。
24.4 Mysql降级
思路:先安装低版本数据库,从原数据库导出数据和表结构,再导入到新数据库中。
24.5 小结