centos7源码安装mysql5.7+版本并实现多个实例

发布时间:2020/06/08 作者:天马行空 阅读(1162)

一、安装前准备工作



1.1 检查 linux 系统版本

[root@localhost ~]#cat /etc/system-release


1.2 检查是否安装了 mysql

[root@localhost ~]# rpm -qa | grep mysql
[root@localhost ~]# rpm -e --nodeps mysql-connector-odbc-5.2.5-6.el7.x86_64


若存在 mysql 安装文件,则会显示 mysql安装的版本信息
如:mysql-connector-odbc-5.2.5-6.el7.x86_64
卸载已安装的MySQL,卸载mysql命令,如下:
将/var/lib/mysql文件夹下的所有文件都删除干净。
细节注意:
检查一下系统是否存在 mariadb 数据库,如果有,一定要卸载掉,否则可能与 mysql 产生冲突。
系统安装模式的是最小安装,所以没有这个数据库。
检查是否安装了 mariadb,如果有就使劲卸载干净:

[root@localhost ~]# rpm -qa | grep mariadb
[root@localhost ~]# systemctl stop mariadb
[root@localhost ~]# rpm -qa | grep mariadb
[root@localhost ~]# rpm -e --nodeps mariadb-5.5.52-1.el7.x86_64
[root@localhost ~]# rpm -e --nodeps mariadb-server-5.5.52-1.el7.x86_64
[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64


1.3 系统内存检查
安装5.6以及以上版本的mysql需要服务器的内存至少在1G以上。

1.4 安装必要的软件包

[root@localhost ~]# yum -y install gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* make cmake


1.5 下载安装文件,下载源码版本,选择Source Code

[root@localhost ~]# wget https://downloads.mysql.com/archives/get/file/mysql-5.7.23.tar.gz


二、安装


2.1 添加用户

[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -r -g mysql mysql


2.2 创建安装目录

[root@localhost ~]# mkdir -p /home/wwwroot/mysql
[root@localhost ~]# chown -R mysql:mysql /home/wwwroot/mysql


2.3 编译安装

[root@localhost ~]# tar -zxvf mysql-5.7.23.tar.gz
[root@localhost ~]# cd mysql-5.7.23
[root@localhost ~]# cmake \
-DCMAKE_INSTALL_PREFIX=/home/wwwroot/mysql \
-DMYSQL_DATADIR=/home/wwwroot/mysql/data3306 \
-DSYSCONFDIR=/home/wwwroot/mysql/ \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/home/wwwroot/mysql/mysqld3306.sock\
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost \
-DMYSQL_USER=mysql \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
[root@localhost ~]# make && make install


参数说明:
DCMAKE_INSTALL_PREFIX=/usr/local/mysql:安装路径
DMYSQL_DATADIR=/data/mysql:数据文件存放位置
DSYSCONFDIR=/etc:my.cnf路径
DWITH_MYISAM_STORAGE_ENGINE=1:支持MyIASM引擎
DWITH_INNOBASE_STORAGE_ENGINE=1:支持InnoDB引擎
DMYSQL_UNIX_ADDR=/data/mysql/mysqld.sock:连接数据库socket路径
DMYSQL_TCP_PORT=3306:端口
DENABLED_LOCAL_INFILE=1:允许从本地导入数据
DWITH_PARTITION_STORAGE_ENGINE=1:安装支持数据库分区
DEXTRA_CHARSETS=all:安装所有的字符集
DDEFAULT_CHARSET=utf8:默认字符
DWITH_EMBEDDED_SERVER=1:嵌入式服务器

2.4 第一种安装方式:每个端口的配置文件独立
2.4.1 添加配置文件,并初始化数据库,实例化两个端口
my3306.cnf

[client]
port = 3306
socket = /home/wwwroot/mysql/mysql3306.sock
[mysqld]
basedir = /home/wwwroot/mysql
datadir = /home/wwwroot/mysql/data3306
port = 3306
socket = /home/wwwroot/mysql/mysql3306.sock
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES


my3307.cnf

[client]
port = 3307
socket = /home/wwwroot/mysql/mysql3307.sock
[mysqld]
basedir = /home/wwwroot/mysql
datadir = /home/wwwroot/mysql/data3307
port = 3307
socket = /home/wwwroot/mysql/mysql3307.sock
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[root@localhost ~]# /home/wwwroot/mysql/bin/mysqld \
--defaults-file=/home/wwwroot/mysql/my3306.cnf \
--user=mysql \
--basedir=/home/wwwroot/mysql \
--datadir=/home/wwwroot/mysql/data3306 \
--initialize-insecure
[root@localhost ~]# /home/wwwroot/mysql/bin/mysqld \
--defaults-file=/home/wwwroot/mysql/my3307.cnf \
--user=mysql \
--basedir=/home/wwwroot/mysql \
--datadir=/home/wwwroot/mysql/data3307 \
--initialize-insecure


initialize-insecure#不需要密码


2.4.2 启动mysql后台运行

[root@localhost ~]# /home/wwwroot/mysql/bin/mysqld_safe --defaults-extra-file=/home/wwwroot/mysql/my3306.cnf --user=mysql &
[root@localhost ~]# /home/wwwroot/mysql/bin/mysqld_safe --defaults-extra-file=/home/wwwroot/mysql/my3307.cnf --user=mysql &


如果只是单例(一台服务器只运行一个端口),可以用下面的方式添加服务,拷贝服务脚本到init.d目录

[root@localhost ~]# cp /home/wwwroot/mysql/support-files/mysql.server /etc/init.d/mysql
[root@localhost ~]# chkconfig mysql --add
[root@localhost ~]# chkconfig mysql on
[root@localhost ~]# service mysql start
[root@localhost ~]# service mysql restart
[root@localhost ~]# service mysql stop


2.4.5 进入3307端口的mysql,初始化root密码

[root@localhost ~]# mysql -u root -p -S /home/wwwroot/mysql/mysql3307.sock
[root@localhost ~]# SET PASSWORD = PASSWORD('123456');
[root@localhost ~]# GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
[root@localhost ~]# flush privileges;


建立软连接,不然mysql -uroot执行不了

ln -s /home/wwwroot/mysql/bin/mysql /usr/bin


2.4.6 停止MYSQL实例,对应的sock文件

[root@localhost ~]# /home/wwwroot/mysql/bin/mysqladmin -u root -p123456 -S /home/wwwroot/mysql/mysql3306.sock shutdown
[root@localhost ~]# /home/wwwroot/mysql/bin/mysqladmin -u root -p123456 -S /home/wwwroot/mysql/mysql3307.sock shutdown


2.5 第二种安装方式:使用mysql自带的多实例
2.5.1 初始化数据库,使用同一个配置文件
my.cnf

[mysqld_multi]
mysqld =/home/wwwroot/mysql/bin/mysqld_safe
mysqladmin=/home/wwwroot/mysql/bin/mysqladmin
log =/home/wwwroot/mysql/log/mysql_multi.log
user =xxx
password =xxx
[mysqld3306]
# 设置监听开放端口 [多实例中一定要不同]
port = 3306
# 设置运行用户
#user=mysql
basedir =/home/wwwroot/mysql
# 设置数据目录 [多实例中一定要不同]
datadir =/home/wwwroot/mysql/data3306
# 设置sock存放文件名 [多实例中一定要不同]
socket =/home/wwwroot/mysql/mysql3306.sock
#log-error =/home/wwwroot/mysql/log/mysql3306.log
pid-file =/home/wwwroot/mysql/mysql3306.pid
[mysqld3307]
port = 3307
#user=mysql
basedir =/home/wwwroot/mysql
datadir =/home/wwwroot/mysql/data3307
socket =/home/wwwroot/mysql/mysql3307.sock
#log-error =/home/wwwroot/mysql/log/mysql3307.log
pid-file =/home/wwwroot/mysql/mysql3307.pid


2.5.2 初始化数据库

[root@localhost ~]# /home/wwwroot/mysql/bin/mysqld \
--defaults-file=/home/wwwroot/mysql/my.cnf \
--user=mysql \
--basedir=/home/wwwroot/mysql \
--datadir=/home/wwwroot/mysql/data3306 \
--initialize-insecure
[root@localhost ~]# /home/wwwroot/mysql/bin/mysqld \
--defaults-file=/home/wwwroot/mysql/my.cnf \
--user=mysql \
--basedir=/home/wwwroot/mysql \
--datadir=/home/wwwroot/mysql/data3307 \
--initialize-insecure


2.5.3 启动mysql

[root@localhost ~]# /home/wwwroot/mysql/bin/mysqld_multi --defaults-file=/home/wwwroot/mysql/my.cnf start

有可能会报错,需要执行下面的代码设置PATH

[root@localhost ~]# vi /etc/profile


找到export PATH=段,加入:/home/wwwroot/mysql/bin
也可以使用

[root@localhost ~]# cp /home/wwwroot/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi
[root@localhost ~]# service mysqld_multi start 3306,3307
[root@localhost ~]# service mysqld_multi restart
[root@localhost ~]# service mysqld_multi stop


如果后面不加3306或者3307默认是对所有的实例进行操作,my.cnf中设置的mysqld_multi段中设置的用户密码在stop的时候会用到,因为是明文,所以需要修改启动脚本

[root@localhost ~]# vi bin/mysqld_multi
修改
my $com= join ' ', 'my_print_defaults', @defaults_options, $group;
为
my $com= join ' ', 'my_print_defaults -s', @defaults_options, $group;


2.5.4 查看实例的运行状态

[root@localhost ~]# service mysqld_multi report
[root@localhost ~]# /home/wwwroot/mysql/bin/mysqld_multi report
关键字mysql