1、下载mysql glibc版压缩包
2、解压、移动到/usr/local/mysql,并创建mysql用户和组
tar -xzvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
mv ./mysql-5.7.23-linux-glibc2.12-x86_64 /usr/local/mysql
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
3、设置目录权限
cd /usr/local/mysql/
chown -R mysql:mysql ./
4、查看数据库服务相关目录,修改配置文件
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
(PS:也可手动创建/etc/my.cnf文件添加以下内容;)
5、配置mysql服务脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
修改basedir、 datadir、 pid_file 三个路径与my.cnf对应
6、初始化系统数据库和系统表
bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql
# 5.7.6之前的版本使用scripts/mysql_install_db --user=mysql
如图的官方文档相关说明:
--initialize #初始化密码,会输出到屏幕上
可能报错:
FATAL ERROR: please install the following Perl m odules before executing scripts/mysql_install_db:
Data::Dumper
解决方法:yum -y install autoconf
7、启动数据库
bin/mysqld_safe --user=mysql &
可能报错:
Starting MySQL..... ERROR! The server quit without updating PID file (/usr/local/mysql/data/mysqld.pid)
原因:mysql没有对mysql主目录取得完全权限
解决方法:chown -R mysql:mysql /usr/local/mysql
8、添加mysql服务至服务列表
chkconfig --add mysqld
chkconfig mysqld on
9、将mysql/bin目录命令添加到全局路径参数path
使配置立即生效
source /etc/profile
10、添加服务自启动
将service mysqld start 添加至文件 /etc/rc.local
11、登录
第一次登录可能会报错:
ERROR 1862 (HY000): Your password has expired. To log in you must change it using a client that supports expired passwords.
意思是初始化的密码已过期
解决步骤:
编辑配置文件,在[mysqld]加上skip-grant-tables(即不启用授权表),重启mysqld
成功登录后把root密码改为不过期:
update mysql.user set password_expired='N' where user='root'
再次编辑配置文件把skip-grant-tables去掉,重启mysqld
登录修改root密码:
set password for 'root'@localhost = PASSWORD(‘密码’);
PS:可以在启动时加上该参数:bin/mysqld_safe --user=mysql --skip-grant-tables &
而不用更改配置文件且无需重启
从mysql5.5起,mysql源码安装的编译工具configure开始向cmake过渡;我这里也没去研究为什么要用cmake,反正它就是代替之前的configure做一些安装前的检查、配置等一系列工作。
1、准备工作
1.1、安装依赖包
yum install ncurses-devel libaio-devel gcc gcc-c++ bison -y
1.2、安装cmake编译工具
yum install cmake –y
1.3、创建MySQL用户和组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
1.4、创建boost库目录,cmake编译时需要用到
mkdir –p /usr/local/boost
2、官网下载源码安装包mysql-5.7.23.tar.gz
3、解压进到该目录使用cmake编译
tar –zxvf mysql-5.7.23.tar.gz
cd mysql-5.7.23
开始编译:
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mydata \
-DSYSCONFDIR=/etc \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_SSL=system \-DWITH_ZLIB=system \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost
部分选项说明:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #(mysql主目录)
-DMYSQL_DATADIR=/data/mydata \ #(mysql数据目录)
-DSYSCONFDIR=/etc \ #(mysql配置文件目录)
-DMYSQL_UNIX_ADDR= /var/lib/mysql/mysql.sock \ #(mysql.sock绝对路径名,默认是/tmp/mysql.sock)
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #(编译安装INNODB存储引擎)
-DWITH_MYISAM_STORAGE_ENGINE=1 \ #(编译安装MYISAM存储引擎)
-DWITH_READLINE=1 \ #(启用readline 库的支持提供可供编辑的命令行)
-DWITH_SSL=system \ # (SSL支持的类型,这里使用系统的OpenSSL库)
-DWITH_ZLIB=system \ #(zlib支持类型,这里使用系统的zlib库)
-DDEFAULT_CHARSET=utf8 \ #(默认字符集) -DDEFAULT_COLLATION=utf8_general_ci \ #(默认字符编码)
-DDOWNLOAD_BOOST=1 \ #(是否下载Boost源(如果它不在指定位置),默认是 OFF)
-DWITH_BOOST=/usr/local/boost #(指定Boost库目录位置)
关于这些选项的官方说明:
https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html#option_cmake_mysql_unix_addr
(错误:Cannot find appropriate system libraries for WITH_SSL=system
解决方案:yum install ncurses-devel 和 yum install openssl-devel)
4、编译并安装
make && make install
5、配置、初始化、启动过程到最后的登录参考上述二进制安装的3-11步骤,这里就不再做描述。
如果没有数据,可直接卸载重新安装即可。想要不丢失数据顺利升级,只要备份好原数据目录就不会有什么问题。源码跟二进制的升级方式基本一样,区别只在于源码需要编译而二进制只需解压即可。
先晒出官方说明:
1、关闭mysql服务进程
service mysqld stop
2、备份原mysql主目录
mv /usr/local/mysql /usr/local/mysql_back
3-(二进制)、解压5.7二进制包使之成为新的mysql主目录
tar -xzvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
mv ./mysql-5.7.23-linux-glibc2.12-x86_64 /usr/local/mysql
3-(源码)、解压5.7源码安装包做cmake、make && make install生成新的mysql主目录
tar –zxvf mysql-5.7.23.tar.gz
cd mysql-5.7.23
cmake …
make && make install
4、拷贝原数据目录到新mysql主目录,并设置目录权限
cp -R /usr/local/mysql_back/data /usr/local/mysql/
cd /usr/local/mysql/
chown -R mysql:mysql ./
(PS:mysql5.7若开启log-bin必需在配置文件加上server-id)
5、启动mysql服务,并使用mysql_upgrade更新升级
bin/mysqld_safe --user=mysql &
./bin/mysql_upgrade -uroot
6、升级完成后在数据目录下会生成mysql_upgrade_info,确定升级无误后可删除原数据库目录
rm -rf /usr/local/mysql_back
7、可能会出现的一些问题
7.1查看二进制日志时报错:ERROR: Error in Log_event::read_log_event(): 'Sanity check failed', data_len: 31, event_type: 35
问题分析:系统默认用的mysqlbinlog绝对路径为/usr/bin/mysqlbinlog,跟更新后的/usr/local/mysql/bin/mysqlbinlog版本不一致,如图一个为3.3一个为3.4:
解决方法:覆盖掉旧版本的mysqlbinlog
cp /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
1、关闭mysql服务进程
service mysqld stop
2、删除mysql主目录、配置文件、启动文件
rm -rf /usr/local/mysql/
rm -rf /etc/my.cnf
rm -rf /etc/init.d/mysqld
3、删除mysql用户
userdel –r mysql