CentOS安装、升级mysql

因 MySQL Server旧版本存在安全漏洞,需要更新mysql到最新版本5.7.28。

通过yum安装

添加mysql到yum库中

cd /usr/local/src
wget https://repo.mysql.com//mysql80-community-release-el6-3.noarch.rpm
rpm -Uvh mysql80-community-release-el6-3.noarch.rpm

选择版本

这里安装mysql 5.7.28,编辑/etc/yum.repos.d/mysql-community.repo

vi /etc/yum.repos.d/mysql-community.repo

将mysql57中enabled设置为1,mysql80中enabled设置为0,如下图:

{% asset_img 1.png %}

安装mysql

yum install mysql-community-server

启动及关闭mysql服务器

第一次安装完成后,首先进行数据库初始化。

mysqld --initialize --user=mysql --console

启动mysql服务器

service mysqld start

查看mysql服务器状态

service mysqld status

关闭mysql服务器

service mysqld stop

升级mysql

yum update mysql-server

问题

执行service mysqld start时报错。

Initializing MySQL database:  2020-01-08T02:40:13.963868Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2020-01-08T02:40:13.965152Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2020-01-08T02:40:13.965175Z 0 [ERROR] Aborting

修改/etc/my.cnf

vi /etc/my.cnf

在[mysqld]下添加explicit_defaults_for_timestamp=true

再次运行service mysqld start,报错。

Initializing MySQL database:  2020-01-08T02:43:19.858042Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2020-01-08T02:43:19.858095Z 0 [ERROR] Aborting

清空/var/lib/mysql目录。

rm -rf /var/lib/mysql/*

源码安装

环境准备

首先安装如下工具。

yum -y install gcc gcc-c++ autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* make cmake libaio libaio-devel autoconf bzr bison libtool zlib-devel libaio*

下载并安装cmake

cmake网站下载cmake包,依次执行以下命令:

cd /usr/local/src
wget https://cmake.org/files/v3.12/cmake-3.12.1.tar.gz
tar -zxvf cmake-3.12.1.tar.gz

以上命令完成下载和解压操作,接下来进行安装操作

cd cmake-3.12.1
./configure --prefix=/usr/local/cmake
make
make install
export PATH=/usr/local/cmake/bin:$PATH

如果报错:

Error when bootstrapping CMake:
Cannot find a C++ compiler that supports both C++11 and the specified C++ flags.
Please specify one using environment variable CXX.
The C++ flags are "".
They can be changed using the environment variable CXXFLAGS.
See cmake_bootstrap.log for compilers attempted.

需要升级GCC,支持C++11,下载和安装依赖库:GMP、MPFR和MPC有顺序要求,GMP是基础、MPC依赖MPFR。

cd /usr/local/src
wget http://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz
tar -xzvf gcc-9.1.0.tar.gz
cd gcc-9.1.0
./contrib/download_prerequisites

case $(uname -m) in
  x86_64)
    sed -e '/m64=/s/lib64/lib/' \
        -i.orig gcc/config/i386/t-linux64
  ;;
esac

./configure --prefix=/usr/local/gcc-9.1.0/build --with-system-zlib --enable-languages=c,c++ --disable-multilib --disable-bootstrap
make
make install
cp -rf /usr/local/gcc-9.1.0/build/lib64/libstdc++.so* /usr/lib64/

下载并安装ncurses

ncurses官网下载ncurses包,依次执行以下命令。

cd /usr/local/src
wget http://ftp.gnu.org/gnu/ncurses/ncurses-6.1.tar.gz
tar -zxvf ncurses-6.1.tar.gz

以上命令完成下载和解压操作,接下来进行安装操作。

cd ncurses-6.1
./configure --prefix=/usr/local/ncurses
make
make install

boost

wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.bz2
tar -xvf boost_1_59_0.tar.bz2

为MySQL添加用户及组

为了保证操作系统的安全,这里为mysql工作进程创建专用的用户。

groupadd mysql
useradd -r -g mysql mysql -s /bin/false

MySQL安装

mysql官网下载安装包,依次执行以下命令。

cd /usr/local/src
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
tar -zxvf mysql-5.7.28.tar.gz
cd mysql-5.7.28
mkdir bld
cd bld
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=63306 -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/src/boost_1_59_0 -DMYSQL_USER=mysql -DWITH_EMBEDDED_SERVER=OFF
make
make install DESTDIR="/usr/local/mysql"

c++: 编译器内部错误:已杀死(程序 cc1plus),原因是内存不足。

step 1:
  #sudo dd if=/dev/zero of=/home/swap bs=64M count=16
  注释:of=/home/swap,放置swap的空间; count的大小就是增加的swap空间的大小,64M就是块大小,这里是64MB,所以总共空间就是bs*count=1024MB.这里分配空间的时候需要一点时间,等待执行完毕。
step 2:
  # sudo mkswap /home/swap (可能会提示warning: don't erase bootbits sectorson whole disk. Use -f to force,不用理会)
  注释:把刚才空间格式化成swap各式
step 3:
  #sudo swapon /home/swap
  chmod 0600 /swap/
  swapoff /home/swap
  swapon /home/swap
  注释:使刚才创建的swap空间
关闭swap的空间
  step 1:sudo swapoff /home/swap
step 2:sudo rm /home/swap

设置mysql配置文件

mysql的配置文件是放在/etc/目录下的,名字是my.cnf,具体配置如下。

[client]
port=63306
socket=/var/lib/mysql/mysql.sock
[mysqld]
basedir=/usr/local/mysql
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
#skip-external-locking
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

这里需要注意,配置文件最后一行引入了新的配置文件,下面列出my.cnf.d目录下名为mysql-clients.cnf的配置文件内容.

#
# These groups are read by MariaDB command-line tools
# Use it for options that affect only one utility
#

[mysql]

[mysql_upgrade]

[mysqladmin]

[mysqlbinlog]

[mysqlcheck]

[mysqldump]

[mysqlimport]

[mysqlshow]

[mysqlslap]

在my.cnf配置文件中,需要注意几个配置,其中basedir指的是mysql的安装目录,datadir指的是mysql数据文件的存储目录,其他几项配置项,如果大家感兴趣可以自行查看官方解释。还需要特别说明的一个问题是,所有在配置文件中出现的路径、文件均需要具有可读写的权限,前面为MySQL创建了用户及组,所以上述配置文件中涉及到的路径和文件,均需要将其所有者及组指定为mysql用户,这样MySQL服务才能正常启动。 完成以上配置后,需要将mysqld的启动脚本放入/etc/init.d/路径中,执行以下命令。

cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

拷贝完成后,使用vim命令,修改/etc/init.d/mysqld中的basedir和datadir,确保其值与my.cnf文件中的内容相同。

初始化MySQL

因本文采用的是MySQL 5.7.28版本,所以不能使用mysql_install_db命令,而是需要使用mysqld -initialize命令对数据库进行初始化,具体命令如下。

/usr/local/mysql/bin/mysqld --initialize --user=mysql  

若前面配置文件中的各配置项均正确,各路径、文件均存在并可读写,改命令将提示执行成功,并能够在/root/目录下生成一个.mysql_secret文件,使用cat命令可查看其内容,其是mysql中本地root用户的初始密码。这里需要特别说明一下,本文作者使用mysql自动生成初始密码没有登录成功,然后通过安全启动脚本对mysql的root用户密码进行修改后,才能够正常登录和使用,所以这一步目前无法得到确认,大家可根据自己的实际情况处理。

使用安全模式启动MySQL

在mysql安装目录的bin目录下,使用以下命令启动mysql。

/usr/local/mysql/bin/mysqld_safe --user=mysql &

启动后,使用初始化所得的root密码登录mysql,查看是否可以正常操作,命令如下。

./mysql -u root -P 63306 -p

设置MySQL服务开机自启

依次执行以下命令。

cd /usr/local/mysql/bin/
chkconfig --level 35 mysqld on

启动MySQL服务

前文使用的是安全模式启动,现在,需要让MySQL服务正常启动,首先,通过命令

ps aux | grep mysql

查找到通过mysqld_safe命令启动的进程,使用kill命令将其全部杀掉,然后使用

/etc/init.d/mysqld start

命令,启动MySQL服务,接下来,就请使用root用户登录,然后进行创建用户,创建数据库,赋权等操作,这部分属于MySQL的基本操作,本文不再赘述。

关闭MySQL服务

/etc/init.d/mysqld stop

修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';

数据库数据导入

# 生成app用户
CREATE USER 'app'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON app.* TO 'your-database'@'localhost' WITH GRANT OPTION;
  
mysqldump -u app -p your-database > your-database.sql
posted @ 2024-08-27 09:14  不学巫术  阅读(15)  评论(0)    收藏  举报