#MySQL5.7及以上的版本,在编译安装之前需要安装boost,因为高版本mysql需要boots库的安装才可以正常运行。#否则会报CMake Error at cmake/boost.cmake:81错误
1.下载mysql ,这里官网下载含boost的源码包 直接用即可 无需另外在下载boost
1 2 3 4 5 6 7 |
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 |
yum -y install gcc gcc-c++ ncurses ncurses-devel cmake openssl-devel |
添加用户
1 |
useradd -s /sbin/nologin mysql |
建立所需目录并更改所有者为mysql
1 2 |
mkdir -p /data/mysql/data chown -R mysql:mysql /data/mysql |
将下载好的mysql 解压到/usr/local/mysql 目录下
1 2 |
#没有目录自己创建 tar -zxvf mysql-boost-5.7.25.tar.gz -C /usr/local/mysql/ |
切换到/usr/local/mysql 目录下,编译安装
1 |
cmake -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=boost |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
第二种编译安装方式: 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 |
make && make install |
安装好后的/usr/local/mysql 目录结构
配置
编辑/etc/my.cnf ( 如果没有则创建)
我这边的一个配置文件内容如下
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
1 |
chown -R mysql:mysql mysql |
把数据库数据目录用户和组更改为mysql ( 数据库数据目录:/data/mysql/data),方法同上!
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 -P 33068 -p -S /data/mysql.5.6.47/tmp/mysql.sock |
拷贝可执行配置文件
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文件。
启动
1 |
service mysqld start |
注:这一步也是很容易出问题的地方,当这里出现问题的时候,不要慌,看mysql 错误日志的内容,一般根据mysql 错误日志的提示都能很好的解决问题。
#常见启动错误
starting MySQL… ERROR! The server quit without updating PID file (/data/mysql/mysql.pid).
解决办法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 |
./mysql -hlocalhost -uroot -p #无需密码即可连接成功 |
更新密码
1 2 3 4 5 6 7 8 9 |
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; |
退出mysql 重启服务,使用密码登录
修改环境变量
在/etc/profile 中新增一行
1 2 3 4 5 6 7 8 9 10 |
PATH=/usr/local/mysql/bin:$PATH #保存退出 source /etc/profile #设置开机启动 systemctl enable mysqld |
(完)
小错误:如果你启动了mysql 但是在服务器上却找不到他的端口 3306
1 2 3 4 5 6 |
skip-networking #是因为你开启了这个选项 开启该选项后就不能远程访问MySQL 另外: 为安全考虑希望指定的IP访问MySQL,可以在配置文件中增加bind-address=IP,前提是关闭skip-networking bind-address=192.168.1.100 |
- 本文固定链接: https://www.yoyoask.com/?p=752
- 转载请注明: shooter 于 SHOOTER 发表