24.Mysql高级安装和升级

Stella981
• 阅读 717

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 小结

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这