#MySQL5.7及以上的版本,在编译安装之前需要安装boost,因为高版本mysql需要boots库的安装才可以正常运行。#否则会报CMake Error at cmake/boost.cmake:81错误
1.下载mysql ,这里官网下载含boost的源码包 直接用即可 无需另外在下载boost
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.25.tar.gz
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.28.tar.gz
5.8下载地址
下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.28.tar.gz
国内镜像:http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-boost-5.7.28.tar.gz
1
2
3
4
5
6
7
wgethttps://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.25.tar.gz
wgethttps://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.28.tar.gz
5.8下载地址
下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.28.tar.gz
国内镜像:http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-boost-5.7.28.tar.gz
安装所需依赖支持
yum -y install gcc gcc-c++ ncurses ncurses-devel cmake openssl-devel
1
2
yum-yinstallgccgcc-c++ncursesncurses-develcmakeopenssl-devel
添加用户
useradd -s /sbin/nologin mysql
1
useradd-s/sbin/nologinmysql
建立所需目录并更改所有者为mysql
mkdir -p /data/mysql/data
chown -R mysql:mysql /data/mysql
1
2
mkdir-p/data/mysql/data
chown-Rmysql:mysql/data/mysql
将下载好的mysql 解压到/usr/local/mysql 目录下
#没有目录自己创建
tar -zxvf mysql-boost-5.7.25.tar.gz -C /usr/local/mysql/
1
2
#没有目录自己创建
tar-zxvfmysql-boost-5.7.25.tar.gz-C/usr/local/mysql/
切换到/usr/local/mysql 目录下,编译安装
cmake -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=boost
1
cmake-DDEFAULT_CHARSET=utf8-DDEFAULT_COLLATION=utf8_general_ci-DWITH_BOOST=boost
第二种编译安装方式:
cd mysql-5.7.28
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DWITH_BOOST=boost \
-DMYSQL_DATADIR=/data/mysql/ \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
第二种编译安装方式:
cdmysql-5.7.28
cmake.\
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql\
-DWITH_BOOST=boost\
-DMYSQL_DATADIR=/data/mysql/\
-DMYSQL_USER=mysql\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_ARCHIVE_STORAGE_ENGINE=1\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1\
-DWITH_PARTITION_STORAGE_ENGINE=1\
-DWITHOUT_MROONGA_STORAGE_ENGINE=1\
-DWITH_EXTRA_CHARSETS=all\
-DWITH_DEBUG=0\
-DWITH_READLINE=1\
-DWITH_SSL=system\
-DWITH_ZLIB=system\
-DWITH_LIBWRAP=0\
-DENABLED_LOCAL_INFILE=1\
-DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock\
-DDEFAULT_CHARSET=utf8mb4\
-DDEFAULT_COLLATION=utf8mb4_general_ci
make && make install
1
make&&makeinstall
安装好后的/usr/local/mysql 目录结构
配置
编辑/etc/my.cnf ( 如果没有则创建)
我这边的一个配置文件内容如下
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysql/data
pid-file = /data/mysql/mysql.pid
log_error = /data/mysql/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/mysql-slow.log
skip-external-locking
key_buffer_size = 32M
max_allowed_packet = 1024M
table_open_cache = 128
sort_buffer_size = 768K
net_buffer_length = 8K
read_buffer_size = 768K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
thread_cache_size = 16
query_cache_size = 16M
tmp_table_size = 32M
performance_schema_max_table_instances = 1000
explicit_defaults_for_timestamp = true
#skip-networking
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535
#log_bin=mysql-bin
binlog_format=mixed
#server_id = 232
expire_logs_days = 10
early-plugin-load = "" #这个加密选项5.7之前没有这个功能,5.7之前版本不要开启
default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 768K
read_buffer = 2M
write_buffer = 2M
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
socket=/tmp/mysql.sock
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql/data
pid-file=/data/mysql/mysql.pid
log_error=/data/mysql/mysql-error.log
slow_query_log=1
long_query_time=1
slow_query_log_file=/data/mysql/mysql-slow.log
skip-external-locking
key_buffer_size=32M
max_allowed_packet=1024M
table_open_cache=128
sort_buffer_size=768K
net_buffer_length=8K
read_buffer_size=768K
read_rnd_buffer_size=512K
myisam_sort_buffer_size=8M
thread_cache_size=16
query_cache_size=16M
tmp_table_size=32M
performance_schema_max_table_instances=1000
explicit_defaults_for_timestamp=true
#skip-networking
max_connections=500
max_connect_errors=100
open_files_limit=65535
#log_bin=mysql-bin
binlog_format=mixed
#server_id = 232
expire_logs_days=10
early-plugin-load=""#这个加密选项5.7之前没有这个功能,5.7之前版本不要开启
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_buffer_pool_size=128M
innodb_log_file_size=32M
innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=50
[mysqldump]
quick
max_allowed_packet=16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size=32M
sort_buffer_size=768K
read_buffer=2M
write_buffer=2M
以上配置内容非必须,可依据实际情况,做相应的调整!
把安装目录用户和组更改为mysql
chown -R mysql:mysql mysql
1
chown-Rmysql:mysqlmysql
把数据库数据目录用户和组更改为mysql ( 数据库数据目录:/data/mysql/data),方法同上!
#注:/data/mysql/data目录下一定要为空才行
#初始化mysql(5.6)
./scripts/mysql_install_db --basedir=/opt/mysql5.6.47/ --datadir=/data/mysql.5.6.47/data --user=mysql --no-defaults
#初始化mysql(5.7)
./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
#到这一步很容易出问题,在初始化的时候一定要加上面的参数,而且在执行这一步操作前/data/mysql/data 这个目录必须是空的;在这里指定的basedir 和 datadir 目录必须要和/etc/my.cnf 配置的目录一直才行。
如果你的机器装了2个mysql那么你需要注意了,启动的时候需要绝对路径
/opt/mysql5.6/bin/mysqld_safe --defaults-file=/opt/mysql5.6.47/my.cnf --user=mysql &
#sock登录
/usr/local/mysql5.6/bin/mysql -uroot -P 33068 -p -S /data/mysql.5.6.47/tmp/mysql.sock
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#注:/data/mysql/data目录下一定要为空才行
#初始化mysql(5.6)
./scripts/mysql_install_db--basedir=/opt/mysql5.6.47/--datadir=/data/mysql.5.6.47/data--user=mysql--no-defaults
#初始化mysql(5.7)
./mysqld--initialize-insecure--user=mysql--basedir=/usr/local/mysql--datadir=/data/mysql/data
#到这一步很容易出问题,在初始化的时候一定要加上面的参数,而且在执行这一步操作前/data/mysql/data 这个目录必须是空的;在这里指定的basedir 和 datadir 目录必须要和/etc/my.cnf 配置的目录一直才行。
如果你的机器装了2个mysql那么你需要注意了,启动的时候需要绝对路径
/opt/mysql5.6/bin/mysqld_safe--defaults-file=/opt/mysql5.6.47/my.cnf--user=mysql&
#sock登录
/usr/local/mysql5.6/bin/mysql-uroot-P33068-p-S/data/mysql.5.6.47/tmp/mysql.sock
拷贝可执行配置文件
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
1
cp/usr/local/mysql/support-files/mysql.server/etc/init.d/mysqld
注:有些网友文章在这一步中会写到从/usr/local/mysql/support-files 这个目录复制my-default.cnf 到/etc/下作为my.cnf 配置文件,我这里没有这个文件,所以直接在配置环节,自己配置了一个my.cnf文件。
启动
service mysqld start
1
servicemysqldstart
注:这一步也是很容易出问题的地方,当这里出现问题的时候,不要慌,看mysql 错误日志的内容,一般根据mysql 错误日志的提示都能很好的解决问题。
#常见启动错误
starting MySQL… ERROR! The server quit without updating PID file (/data/mysql/mysql.pid).
解决办法:
1.可能是/home/data/mysql 文件夹没有写的权限
解决方法 :给予权限,执行 “chown -R mysql:mysql /home/data/mysql” “chmod -R 755 /home/data/mysql” 然后重新启动mysqld!
2.可能进程里已经存在mysql进程
解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld!
3.可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。
解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。
4.mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。
解决方法:请在[mysqld]下设置这一行:datadir = /home/data/mysql
5.skip-federated字段问题
解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。
6.错误日志目录不存在
解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限
7.selinux惹的祸,如果是centos或redhat系统,默认会开启selinux
解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.可能是/home/data/mysql文件夹没有写的权限
解决方法:给予权限,执行“chown-Rmysql:mysql/home/data/mysql”“chmod-R755/home/data/mysql”然后重新启动mysqld!
2.可能进程里已经存在mysql进程
解决方法:用命令“ps-ef|grepmysqld”查看是否有mysqld进程,如果有使用“kill-9进程号”杀死,然后重新启动mysqld!
3.可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。
解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。
4.mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。
解决方法:请在[mysqld]下设置这一行:datadir=/home/data/mysql
5.skip-federated字段问题
解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。
6.错误日志目录不存在
解决方法:使用“chown”“chmod”命令赋予mysql所有者及权限
7.selinux惹的祸,如果是centos或redhat系统,默认会开启selinux
解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。
测试连接
./mysql -hlocalhost -uroot -p
#无需密码即可连接成功
1
2
./mysql-hlocalhost-uroot-p
#无需密码即可连接成功
更新密码
use mysql;
update user set authentication_string=password('123456') where user='root' and host='localhost';
flush privileges;
#说明:执行sql语句的时候,如果出现ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement. 则需要先执行一下flush privileges.
或者这样修改密码
set password for root@localhost = password('123456');
flush privileges;
1
2
3
4
5
6
7
8
9
usemysql;
updateusersetauthentication_string=password('123456')whereuser='root'andhost='localhost';
flushprivileges;
#说明:执行sql语句的时候,如果出现ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement. 则需要先执行一下flush privileges.
或者这样修改密码
setpasswordforroot@localhost=password('123456');
flushprivileges;
退出mysql 重启服务,使用密码登录
修改环境变量
在/etc/profile 中新增一行
PATH=/usr/local/mysql/bin:$PATH
#保存退出
source /etc/profile
#设置开机启动
systemctl enable mysqld
1
2
3
4
5
6
7
8
9
10
PATH=/usr/local/mysql/bin:$PATH
#保存退出
source/etc/profile
#设置开机启动
systemctlenablemysqld
(完)
小错误:如果你启动了mysql 但是在服务器上却找不到他的端口 3306
skip-networking #是因为你开启了这个选项
开启该选项后就不能远程访问MySQL
另外:
为安全考虑希望指定的IP访问MySQL,可以在配置文件中增加bind-address=IP,前提是关闭skip-networking
bind-address=192.168.1.100
1
2
3
4
5
6
skip-networking#是因为你开启了这个选项
开启该选项后就不能远程访问MySQL
另外:
为安全考虑希望指定的IP访问MySQL,可以在配置文件中增加bind-address=IP,前提是关闭skip-networking
bind-address=192.168.1.100
最后编辑:2020-11-10作者:shooter
这个作者貌似有点懒,什么都没有留下。