编译安装Mysql
mysql官网下载地址:https://dev.mysql.com/downloads/mysql/
mysql5.7boost库下载:https://sourceforge.net/projects/boost/files/boost/
boost1.59:https://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
5.7以后的版本boost库必须装
5.6以前boost库都是自带的不用装
首先卸载系统自带boost,mysql(要是有mysql-libs这个包不用删除)
[root@apache-web mysql-5.7.29]# yum -y remove boost-*
[root@apache-web mysql-5.7.29]# yum -y remove mysql
在编译之前,也需要安装依赖包
5.5编译安装用的configure,5.5之后编译安装用的cmake
5.6之前cmake2.6就可以
5.7以后cmake不能低于2.8
配置mysql的yum网络源
从centos6开始,官方版本的yum源中用mariadb替换了mysql,那么安装mysql一般需要去官网下载rpm包或者源码包等方式。如果还想直接yum安装的话需要自己配置mysql的yum源。
官方yum源
https://dev.mysql.com/downloads/repo/yum/
下载对应版本mysql源到本地,如果系统是centos7,这里选择el7版本
安装yum源
[root@apache-web tools]# rpm -ivh mysql80-community-release-el7-3.noarch.rpm
warning: mysql80-community-release-el7-3.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql80-community-release-el7-3 ################################# [100%]
修改yum网络源的mysql安装版本,默认8.0
要修改默认安装版本的话,可以直接修改mysql的yum源文件,yum配置文件里从5.5版本到8.0都有,只不过默认只开启了mysql8.0。更改别的版本记得将mysql8.0的源 enable=0
vim /etc/yum.repos.d/mysql-community.repo
安装mysql的依赖包
yum -y install gcc gcc-c++ autoconf automake zlib* libxml* ncurses-devel libtool-ltdl-devel* make cmake
[root@apache-web tools]# yum -y install gcc gcc-c++ autoconf automake zlib* libxml* ncurses-devel libtool-ltdl-devel* make cmake
创建www虚拟用户
[root@apache-web tools]# groupadd www
[root@apache-web tools]# useradd -M -s /sbin/nologin -r -g www www
[root@apache-web tools]# id www
uid=991(www) gid=1019(www) groups=1019(www)
创建数据存储目录
[root@apache-web tools]# mkdir -p /server/mysql/data
进行编译安装mysql
[root@apache-web tools]# tar xf boost_1_59_0.tar.gz [root@apache-web tools]# ll total 134948 drwx------ 8 501 games 302 Aug 12 2015 boost_1_59_0 -rw-r--r-- 1 root root 83709983 Feb 26 13:24 boost_1_59_0.tar.gz drwxr-xr-x 36 7161 31415 4096 Feb 26 12:56 mysql-5.7.29 -rw-r--r-- 1 root root 54438870 Feb 25 22:14 mysql-5.7.29.tar.gz -rw-r--r-- 1 root root 26024 Feb 26 11:58 mysql80-community-release-el7-3.noarch.rpm [root@apache-web tools]# mv boost_1_59_0 boost [root@apache-web tools]# cd mysql-5.7.29/
[root@apache-web mysql-5.7.29]# cmake -DCMAKE_INSTALL_PREFIX=/server/mysql -DMYSQL_DATADIR=/server/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/server/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/server/tools/boost [root@apache-web tmp]# make -j 4 [root@apache-web tmp]# make install
-DCMAKE_INSTALL_PREFIX=/server/mysql
- 指定MySQL程序的安装路径,默认/usr/local/mysql
-DMYSQL_DATADIR=/server/mysql/data
- 指定数据文件
-DSYSCONFDIR=/etc
- 指定初始化参数文件目录
-DWITH_MYISAM_STORAGE_ENGINE=1
- 指定静态编译的mysql的存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1
- 指定静态编译的mysql的存储引擎
-DWITH_MEMORY_STORAGE_ENGINE=1
- 指定静态编译的mysql的存储引擎
-DWITH_PARTITION_STORAGE_ENGINE=1
- 指定静态编译的mysql的存储引擎
-DWITH_READLINE=1
- 上下翻历史命令
-DMYSQL_UNIX_ADDR=/server/mysql/mysql.sock
- socket文件路径,默认/tmp/msyql.sock
-DMYSQL_TCP_PORT=3306
- 指定服务端口,默认3306
-DENABLED_LOCAL_INFILE=1
- 指定是否容许本地执行LOAD DATA INFILE,默认off
-DEXTRA_CHARSETS=all
- 扩展的字符集支持所有的
-DDEFAULT_CHARSET=utf8
- 指定服务器默认字符集,默认latin1
-DDEFAULT_COLLATION=utf8_general_ci
- 指定服务器默认的校队规则,默认latin1_general_ci
-DDOWNLOAD_BOOST=1
- 指定开启boost库
-DWITH_BOOST=/server/tools/boost
- 指定boost库文字hi
-----------------------------------------------------------------
进行编译,报错
[ 83%] Built target mysqlpump make[1]: *** [libmysqld/CMakeFiles/sql_embedded.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... make[1]: *** [sql/CMakeFiles/sql.dir/all] Error 2 make: *** [all] Error 2
原因内存不足,至少要6G
解决方法:
[root@apache-web mysql-5.7.29]# dd if=/dev/zero of=/tmp/2G_swap bs=200M count=10 [root@apache-web mysql-5.7.29]# mkswap /tmp/2G_swap [root@apache-web tmp]# swapon 2G_swap [root@apache-web tmp]# chmod 600 2G_swap
要是想永久挂载/etc/fstab
/tmp/2G_swap swap defaults 0 0
安装好以后,修改目录属主属组信息
[root@apache-web server]# chown -R www.www mysql/ [root@apache-web server]# ll total 0 drwxr-xr-x 2 root root 6 Feb 26 14:06 boost drwxr-xr-x 11 www www 178 Feb 26 15:28 mysql drwxr-xr-x 2 root root 6 Oct 9 18:18 scripts drwxr-xr-x 4 root root 143 Feb 26 14:05 tools
生成配置文件
从5.7.18开始不在二进制包中提供my-default.cnf文件,在5.7.18版本中,使用tar.gz安装时,也就是压缩包解压出来安装这种,已经不再需要my.cnf文件也能正常运行
- 5.7.18以前版本需要这样先把配置文件进行备份
[root@apache-web server]# mv /etc/my.cnf /etc/my.cnf.bak
[root@apache-web server]# cp -a /server/mysql/support-files/my-default.cnf /etc/my.cnf
- 5.7.18以后的版本
创建logs,pids,tmp目录,用于存放日志文件,进程id文件。
[root@apache-web server]# mkdir -p mysql/{logs,pids,tmp} [root@apache-web server]# chown -R www.www mysql/{logs,pids,tmp} [root@apache-web server]# ll mysql/ total 296 drwxr-xr-x 2 www www 4096 Feb 26 15:28 bin drwxr-xr-x 2 www www 6 Feb 26 12:32 data drwxr-xr-x 2 www www 55 Feb 26 15:28 docs drwxr-xr-x 3 www www 4096 Feb 26 15:28 include drwxr-xr-x 4 www www 192 Feb 26 15:28 lib -rw-r--r-- 1 www www 276202 Dec 18 20:59 LICENSE drwxr-xr-x 2 www www 6 Feb 26 16:39 logs drwxr-xr-x 4 www www 30 Feb 26 15:28 man drwxr-xr-x 10 www www 4096 Feb 26 15:28 mysql-test drwxr-xr-x 2 www www 6 Feb 26 16:39 pids -rw-r--r-- 1 www www 587 Dec 18 20:59 README -rw-r--r-- 1 www www 587 Dec 18 20:59 README-test drwxr-xr-x 28 www www 4096 Feb 26 15:28 share drwxr-xr-x 2 www www 90 Feb 26 15:28 support-files drwxr-xr-x 2 www www 6 Feb 26 16:39 tmp
创建配置文件my.cnf
用这个:
[client] port = 3306 default-character-set=utf8 socket = /server/mysql/mysql.sock [mysql] port = 3306 default-character-set=utf8 socket = /server/mysql/mysql.sock [mysqld] port = 3306 user = www basedir = /server/mysql datadir = /server/mysql/data tmpdir = /server/mysql/tmp pid-file = /server/mysql/pids/mysql.pid log-error = /server/mysql/logs/error.log expire_logs_days = 5 socket = /server/mysql/mysql.sock skip_name_resolve = 1 transaction_isolation=READ-COMMITTED character-set-server=utf8 collation-server=utf8_general_ci init_connect='SET NAMES utf8'
解释:
[mysqld] port=3306 user=www #mysql安装根目录 basedir=/server/mysql #mysql数据文件所在位置 datadir=/server/mysql/data #临时目录 比如load data infile会用到 tmpdir=/server/mysql/tmp #mysql进程ID目录 pid_file=/server/mysql/pids/mysql.pid #mysql日志文件位置 log_error=/server/mysql/logs/error.log #mysql binlog日志文件保存的过期时间,过期后自动删除 expire_logs_days=5 #设置socke文件所在目录 socket=/server/mysql/mysql.sock #只能用IP地址检查客户端的登录,不用主机名 skip_name_resolve = 1 #事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能) transaction_isolation=READ-COMMITTED #数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节) character-set-server=utf8 #数据库字符集对应一些排序等规则,注意要和character-set-server对应 collation-server=utf8_general_ci #设置client连接mysql时的字符集,防止乱码 init_connect='SET NAMES utf8'
生成服务启动脚本
[root@apache-web server]# cp -a /server/mysql/support-files/mysql.server /etc/init.d/mysqld [root@apache-web server]# chmod +x /etc/init.d/mysqld [root@apache-web server]# chkconfig --add /etc/init.d/mysqld [root@apache-web server]# chkconfig mysqld on [root@apache-web server]# chkconfig --list mysqld Note: This output shows SysV services only and does not include native systemd services. SysV configuration data might be overridden by native systemd configuration. If you want to list systemd services use 'systemctl list-unit-files'. To see services enabled on particular target use 'systemctl list-dependencies [target]'. mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
数据库初始化(我这个没反应,但是成功了,我也不知道为什么)
[root@apache-web bin]# ./mysqld --initialize --user=www --basedir=/server/mysql --datadir=/server/mysql/data
启动mysqld
[root@apache-web /]# systemctl start mysqld
[root@apache-web /]# systemctl status mysqld.service
● mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)
Active: active (running) since Wed 2020-02-26 17:43:09 CST; 1min 8s ago
Docs: man:systemd-sysv-generator(8)
Process: 53458 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/mysqld.service
├─53471 /bin/sh /server/mysql/bin/mysqld_safe --datadir=/server/mysql/data --pid-file=/server...
└─53758 /server/mysql/bin/mysqld --basedir=/server/mysql --datadir=/server/mysql/data --plugi...
Feb 26 17:43:08 apache-web systemd[1]: Starting LSB: start and stop MySQL...
Feb 26 17:43:09 apache-web mysqld[53458]: Starting MySQL. SUCCESS!
Feb 26 17:43:09 apache-web systemd[1]: Started LSB: start and stop MySQL.
mysql命令添加环境变量
- 方法一:/etc/profile
export PATH=/server/mysql/bin:$PATH
[root@apache-web /]# source /etc/profile
- 方法二:ln -s /server/mysql/bin/* /usr/bin/*
登陆数据库
查看数据库密码:cat /server/mysql/logs/error.log |grep password
修改数据库密码:
[root@apache-web /]# mysql -uroot -p7Et=coWF2o+Y
mysql> set password=password("123456");
Query OK, 0 rows affected, 1 warning (0.00 sec)
方法二:
mysql> alter user 'root'@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)

评论