手动使用deb文件安装任意版本mysql
上一级页面:mysql安装配置-linux
前言
使用deb文件可以安装任何版本的mysql,但它会对系统的apt更新流程造成问题,并阻塞其他应用的依赖设置,推荐更加合适的手动安装方法,见在一个linux主机安装多个版本的mysql
下载安装
官网下载:MySQL :: Download MySQL Community Server
清华镜像站下载:Index of /mysql/downloads/MySQL-5.7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
若要下载mysql5.x latest版本,点击图中looking for previous GA version
选择deb bundle
若要下载历史版本,选择archive
选择deb bundle
创建下载目录:~/src
,执行如下命令,
# 创建文件夹存放下载的文件:
mkdir ~/src
# 进入文件夹,
cd ~/src
mkdir mysql
cd mysql
下载Bundle(mysql-server_5.7.37-1ubuntu18.04_amd64.deb-bundle.tar
)
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.37-1ubuntu18.04_amd64.deb-bundle.tar
--解压压缩包.tar.gz
tar -xzvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
*.tar
用 tar –xvf
解压
tar -xvf mysql-server_5.7.37-1ubuntu18.04_amd64.deb-bundle.tar
最小需要安装:
mysql-community-client
、mysql-community-server
mysql-client
mysql-server
和mysql-common
如果需要mysqld(随系统自启动服务),需要安装对应包
mysqld
如果IDE连接数据库,还需要
dev
包,
所以可以首先删除不需要安装的包,如test
和source
然后使用dpkg进行安装,安装其余包
sudo dpkg -i *.deb
发现依赖不全
apt --fix-broken install
会安装比如
libmecab2 libtinfo5
然后重新安装一遍
sudo dpkg -i *.deb
安装完成
mysql配置文件读取顺序
官方文档:MySQL :: MySQL 5.7 Reference Manual :: 4.2.2.2 Using Option Files
官方给出的读取顺序如下
按照官方文档所述,最高优先级应当读取/etc/my.cnf
配置my.cnf
发现安装目录/usr/share/mysql
下,没有support-files 目录
和my-default.cnf
5.7.18版本以前,需要手动拷贝my-default.cnf
到/etc/my.cnf
来完成配置文件的初始化
但注意到:从5.7.18开始不在二进制包中提供my-default.cnf
文件。参考:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html
经过测试,在5.7.18版本中,使用tar.gz安装时,也就是压缩包解压出来dpkg安装这种,已经不再需要my.cnf文件也能正常运行。
my.cnf
文件就是把在命令行上启动MySQL时后面的参数用cnf文件配置好,那么启动时就不再需要在命令后跟上参数。
所以:安装mysql5.7.18之后的版本就不再需要/etc/my.cnf
了,
但是如果需要开启MySQL的慢查询,或者是主从复制的功能,还是需要在/etc下面配置my.cnf文件的,但是只需要复制跟自己使用功能相关的配置即可没必要全部复制
由于在5.7.18开始,二进制包不再包含示例文件my-default.cnf,
所以我从5.7.17版本中提取了样例,但是发现里面也没有太多项配置,默认my-default.cnf
内容如下:
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# socket = .....
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
所以,我们可以自己创建一个my.cnf,修改配置文件
sudo vim /etc/my.cnf
主要修改里面的basedir
和datadir
,内容和前面mysqld --initialize
时的参数一致
全文为
[mysqld]
basedir = /usr
datadir = /var/lib/mysql
port = 3306
server_id = 22206
初始化mysqld 指定mysql的basedir datadir
切换到 root用户
sudo -s
重启已有的mysql服务,
systemctl restart mysql.service
官方文档MySQL :: MySQL 5.7 参考手册 :: 2.10.1 初始化数据目录
执行命令初始化 :初始化会创建一个root用户,如果以前已经运行过这个命令,或者使用deb文件安装的,则可以跳过这步
mysqld --initialize --user=mysql
有关mysqld --initialize
命令的重要信息,尤其是有关可能使用的命令选项的信息,请参见数据目录初始化过程。有关服务器如何执行初始化的详细信息,请参阅数据目录初始化期间的服务器操作。
通常,只有在首次安装MySQL后,才需要完成数据目录初始化。(要升级到现有安装,请改为执行升级过程;请参见第 2.11 节 “升级 MySQL”。但是,初始化数据目录的命令不会覆盖任何现有的数据库表,因此在任何情况下都可以安全地运行。mysql
如果 mysqld 无法识别安装目录或数据目录的正确位置,则可能需要指定其他选项basedir``data-dir
bin/mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql
此处需要注意,记住参数,后文用到
basedir=/usr
datadir=/var/lib/mysql
这里的basedir和datadir都是deb安装的默认值,可以记一下
成功后,会生成data目录并生成root用户 (默认datadir=/var/lib/mysql
)
见如何修复 Linux 中的“MySQL 错误 1819 (HY000):” (tecmint.com)
配置mysql自动启动
给与可执行权限
chmod +x /etc/init.d/mysql
也可以选择使用systemctl配置其自启动
sudo systemctl enable mysql.searvice
sudo systemctl start mysql
启动mysql
sudo systemctl start mysql
登陆mysql
mysql -hlocalhost -uroot -p
报错解决
如果出现:
-bash: mysql: command not found
就执行:
whereis mysql
查看mysql可执行文件在哪,然后创建一个符号链接
ln -s path/to/mysql /usr/bin/mysql