第一次接触MySQL?
我该下载哪个版本?
我该使用哪种安装方式?
不同的安装方式有什么不同?
每次安装都要从网上查找安装教程?
不同的系统,不同的包管理方式,如何一次学会在所有系统的上安装MySQL?
想必很多新手都避免不了有这些疑问,都想一次性投入精力解决以上问题,下面我用我理解的方式帮助你解决这些疑问。
Centos8
,MySQL 5.7.28
由于MySQL官网还没有放出Centos8的安装包,我这里使用的是Centos7的tar包进行安装,不过我也尝试了Centos7的RPM包安装很顺畅没有任何问题,不过还是推荐最好使用mysql发布的相关平台包进行安装,避免不必要的麻烦。
servie mysql start
或者systemctl mysql start
的方式启动服务。
不过MySQL已经为我们准备好了服务文件,我们只需要将服务文件移动到对应的目录即可。
cp /usr/local/mysql/mysql.server /etc/init.d/mysql # 此时我们就可以使用下面命令,不过暂时下面的命令会报错,看后面解决 service mysql start #systemctl mysql start
1
2
3
完成以上4步后,就跟RPM包的安装效果一样了。
在MySQL 5.7.*
的版本中默认/usr/local/mysql
中不再自带data目录,而这个data目录是MySQL实例的数据目录,所以我们要先生成这个data目录。
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
/usr/local/mysql/my.cnf
~/.my.cnf
# 这里指定mysql客户端的默认连接端口 [client] port=3306 # 这里指定mysql服务的数据目录,可以修改 [mysqld] datadir=/mysql/data port = 3306
1
2
3
4
5
6
7
8
同样的命令初始化mysql,但是这次我们使用了my.cnf配置文件,我们将data目录指向了/mysql/data
mysqld --initialize
1
在机器有限的环境下我们通常会这么干,而且mysql也支持这样的操作。
如果要运行多个mysql实例首先要生成多个mysql的data目录,每个实例一个data目录,可以通过下面命令这样:
# 实例1
mysqld --defaults-file=/root/mysql/my1.cnf --initialize --user=mysql
# 实例2
mysqld --defaults-file=/root/mysql/my2.cnf --initialize --user=mysql
# 实例3
mysqld --defaults-file=/root/mysql/my3.cnf --initialize --user=mysql
1 2 3 4 5 6
启动多个实例会导致service mysql start
命令失效,因为mysqld默认是从固定的几个位置查找my.cnf的,而我的配置文件可能不再这几个默认位置。
所以暂时只能使用mysqld_safe方式来启动mysql服务:
mysqld_safe --defaults-file=/root/mysql/my1.cnf --user=mysql
mysqld_safe --defaults-file=/root/mysql/my2.cnf --user=mysql
mysqld_safe --defaults-file=/root/mysql/my3.cnf --user=mysql
1 2 3
如果你有能力修改/usr/local/mysql/supper-files/mysql.server
文件也可以通过复制多分,分别修改对应的数据目录,并移动到/etc/init.d/
目录下,如:/etc/init.d/mysql1
/etc/init.d/mysql2
/etc/init.d/mysql3
service mysql1 start
service mysql2 start
service mysql3 start
1 2 3
修该方法也很简单,只要打开/usr/local/mysql/support-files/mysql.server
文件找到下面这行:
# 指定实例的datadir目录即可
datadir=
1 2
当然我们还需要在my*.cnf文件中加上下面这句话,因为多个mysql实例不能共用一个socket文件:/tmp/mysql.socket.lock
my*.cnf
# my1.cnf
[mysqld]
socket=/tmp/mysql.socket.lock.1
# my2.cnf
[mysqld]
socket=/tmp/mysql.socket.lock.2
# my3.cnf
[mysqld]
socket=/tmp/mysql.socket.lock.3
1 2 3 4 5 6 7 8 9 10 11
我们也看到了上面的方式启动多个mysql实例甚是麻烦,所以mysql提供了mysqld_multi
命令来帮助我们解决这个问题,我们不再需要同时定义多个my.cnf文件,只要一个就够了,配置文件如下:
[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
mysqladmin=/usr/local/mysql/bin/mysqladmin
user=multi_admin
# 官方例子中为password,实测无效,估计是不同版本有改动,需要改为pass
pass=123456
log=/mysql/log
[mysqld1]
port=3306
datadir=/mysql/3306/data
# 每个服务都有一个进程,所以需要指定多个socket文件
socket=/mysql/3306/mysql.sock
# 使用root账户启动,如果非root账户,则需要注意文件/目录的权限问题
user=root
[mysqld2]
port=3307
datadir=/mysql/3307/data
socket=/mysql/3307/mysql.sock
user=root
[mysqld3]
port=3308
datadir=/mysql/3308/data
socket=/mysql/3308/mysql.sock
user=root
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
mysqld_multi支持一个配置文件中配置多个服务,服务的分隔方式是mysqld+数字,如下命令我们启动的是mysqld2的配置
mysqld_multi --defaults-file=/root/mysql/my_multi.cnf start 2
1
如果我们不配置mysqladmin的用户/密码,结果是只能start,不能stop,解决办法就是创建一个新用户,并赋予shutdown
权限,当然root用户也可以。
上面我们定义了3个mysql服务,我们需要连接到三个服务分别创建相同的账号和密码。
# 创建用户
CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY '123456';
# 给用户添加shutdown权限
GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';
1 2 3 4