Home
Linux
Golang
MySQL
PHP
Other
Message
MySQL 8.0安装,含编译安装
创建日期:2020-07-10 22:05:02
更新日期:2020-10-25 19:49:41
栏目:
MySQL
浏览:1100
[TOC] # 安装 MySQL8.0 yum 版 - 去官网查看和下载 yum 包 :[点击去官网](https://dev.mysql.com/downloads/repo/yum/ "点击去官网") 如果你的是 Linux 8 的系统,直接用这个地址 `wget https://repo.mysql.com//mysql80-community-release-el8-1.noarch.rpm` - 安装 yum 包 `rpm -ivh mysql80-community-release-el8-1.noarch.rpm ` - 更新 yum `yum update` - 安装 `yum install mysql-server` - 设置权限 `chown mysql:mysql -R /var/lib/mysql` - 初始化 `mysqld --initialize` - 启动 `systemctl start mysqld` 很遗憾,启动失败,报错如下: ``` Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details. ``` 查看 MySQL 状态 `systemctl status mysqld` 信息如下: ``` ● mysqld.service - MySQL 8.0 database server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since Tue 2020-07-07 15:57:04 CST; 15s ago Process: 13691 ExecStopPost=/usr/libexec/mysql-wait-stop (code=exited, status=0/SUCCESS) Process: 13687 ExecStart=/usr/libexec/mysqld --basedir=/usr (code=exited, status=1/FAILURE) Process: 13650 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.service (code=exited, status=0/SUCCESS) Process: 13626 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS) Main PID: 13687 (code=exited, status=1/FAILURE) Status: "Server startup in progress" Error: 2 (No such file or directory) Jul 07 15:57:04 iZuf6dou23krpyawdedba1Z systemd[1]: Starting MySQL 8.0 database server... Jul 07 15:57:04 iZuf6dou23krpyawdedba1Z systemd[1]: mysqld.service: Main process exited, code=exited, status=1/FAILURE Jul 07 15:57:04 iZuf6dou23krpyawdedba1Z systemd[1]: mysqld.service: Failed with result 'exit-code'. Jul 07 15:57:04 iZuf6dou23krpyawdedba1Z systemd[1]: Failed to start MySQL 8.0 database server. ``` - 重新初始化,带参 `mysqld --initialize --user=mysql` 还是无效 - 还是看日志吧:`vim /var/log/mysql/mysqld.log` 还好不是很大,如果很大,就先清空 `:&d` 整个日志内容,然后再启动 `systemctl start mysqld` 一下,生成的部分日志如下所示: ``` 2020-07-07T08:23:35.729468Z 0 [System] [MY-010116] [Server] /usr/libexec/mysqld (mysqld 8.0.17) starting as process 14057 2020-07-07T08:23:35.737394Z 1 [ERROR] [MY-012271] [InnoDB] The innodb_system data file 'ibdata1' must be writable 2020-07-07T08:23:35.737413Z 1 [ERROR] [MY-012278] [InnoDB] The innodb_system data file 'ibdata1' must be writable 2020-07-07T08:23:35.737430Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine 2020-07-07T08:23:35.737528Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed. 2020-07-07T08:23:35.737602Z 0 [ERROR] [MY-010119] [Server] Aborting 2020-07-07T08:23:35.737914Z 0 [System] [MY-010910] [Server] /usr/libexec/mysqld: Shutdown complete (mysqld 8.0.17) Source distribution. ``` - 日志一看,这就很清晰了,权限,无法写入数据的问题(`/var/lib/mysql`),问题分析:最开始初始化的时候没有带上 ` --user=mysql` 导致默认是以当前用户 `root` 身份来运行的,最开始的时候,我们把这个文件夹的用户和用户组都给 `mysql` 了,进入该目录,能看到很多文件的所有者都是 `root`,可是MySQL启动是以 `mysql` 用户启动的,无法写入文件 - 再次启动 `systemctl start mysqld` 完美启动成功,nice - 获取随机密码:`grep "password" /var/log/mysql/mysqld.log` - 登陆MySQL,进行一些配置 ``` # 登录mysql mysql -uroot -p # Enter password: (输入查询到的临时密码) # 修改密码为我的邮箱,可以通过联系到我 ALTER USER 'root'@'localhost' IDENTIFIED BY 'sxy@shuxiaoyuan.com'; # 刷新权限 flush privileges; # 退出,重新登陆 ``` # 安装 MySQL8.0 源码编译版 一、下载,先去官网瞅瞅:https://dev.mysql.com/downloads/mysql 官方安装手册(如果可以,尽量去看官方文档,懒得看,就看我这个吧):https://dev.mysql.com/doc/refman/5.7/en/installing-source-distribution.html 我这里选择的版本是:  下载源码:`wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.30.tar.gz` - 安装 gcc 等编译工具 `yum install -y cmake make gcc gcc-c++ openssl openssl-devel ncurses ncurses-devel bison bison-devel` 二、解压 `tar -zxvf mysql-boost-5.7.30.tar.gz` 三、开始安装 - 进入解压目录 `cd mysql-5.7.30` ``` # 安装 MySQL boost 依赖,如果你下载的是不带 Boots 的版本需要安装下 Boots,编译时需要带上这个路径 curl -o boost_1_59_0.tar.gz https://jaist.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz tar -xzvf boost_1_59_0.tar.gz -C /usr/local/ ``` - 组装参数,构建项目,参数解释请看附录 ``` cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.30 \ -DMYSQL_DATADIR=/usr/local/mysql-5.7.30/data \ -DSYSCONFDIR=/usr/local/mysql-5.7.30/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=ON \ -DWITH_MYISAM_STORAGE_ENGINE=ON \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DENABLED_LOCAL_INFILE=ON \ -DMYSQL_TCP_PORT=3306 \ -DMYSQL_UNIX_ADDR=/usr/local/mysql-5.7.30/tmp/mysql.sock \ -DWITH_INNODB_MEMCACHED=ON \ -DWITH_BOOST=./boost/boost_1_59_0 ``` - cmake成功后如下图所示:  - 开始编译:`make` ,这个过程会比较长(本机耗时:72min),可以去喝杯茶,上个厕所,打个游戏  - 若编译失败,解决问题后可清理重新编译(成功就不用运行了) `make clean` `rm CMakeCache.txt` - 编译成功,开始安装:`make install`,这个很快,默认安装位置 `/usr/local/mysql`  四、安装完成后配置 - 创建一个mysql用户和组 ``` groupadd mysql useradd -r -g mysql -s /bin/false mysql ``` - 创建相应目录 ``` cd /usr/local/mysql-5.7.30 mkdir data etc tmp logs ``` - 将目录权限授予 MySQL 用户和用户组 `chown -R mysql:mysql /usr/local/mysql-5.7.30` - 文件权限 `chmod -R 750` 待定 - 创建 `my.cnf` 配置文件,见附录 - 使用配置初始化数据目录 `bin/mysqld --defaults-file=/usr/local/mysql-5.7.30/etc/my.cnf --initialize --user=mysql` - 配置环境变量 ``` # 打开配置文件 vi /etc/profile # 在文件末尾加入下面代码,:wq保存退出(无权限可:q!强制退出,换root账户重来) export MYSQL_HOME=/usr/local/mysql export PATH=$MYSQL_HOME/bin:$PATH # 使环境变量即时生效 source /etc/profile ``` - 配置 `systemctl` 方式启动 MySQL ``` # 复制配置文件到系统服务配置 cp support-files/mysql.server /etc/init.d/mysql # 重新加载系统服务配置 systemctl daemon-reload # 启动mysql服务 systemctl start mysql # 下面列出其余systemctl命令 # 查看mysql服务状态 systemctl status mysql # 停止mysql服务 systemctl stop mysql # 重新启动mysql服务 systemctl restart mysql # 配置mysql开机自动启动 systemctl enable mysql # 配置mysql开机不自动启动 systemctl disable mysql ``` - 修改 MySQL 登陆密码 ``` # 查询生成的临时密码 grep "password" /usr/local/mysql/logs/error.log # 登录mysql mysql -uroot -p # Enter password: (输入查询到的临时密码) # 修改密码为我的邮箱,可以通过联系到我 ALTER USER 'root'@'localhost' IDENTIFIED BY 'sxy@shuxiaoyuan.com'; # 授予权限,所有权限(all),所有库(*.*),root用户,任何主机(%),具体可查看MySQL账号权限管理章节 grant all privileges on *.* to 'root'@'%' identified by 'sxy@shuxiaoyuan.com' with grant option; # 刷新权限 flush privileges; # 退出,重新登陆 ``` - 配置远程登陆 ``` # 查看防火墙状态 systemctl status firewalld # 查看3306端口状态 firewall-cmd --zone=public --query-port=3306/tcp # 打开3306端口,--permanent 永久生效(无此参数重启后失效) firewall-cmd --zone=public --add-port=3306/tcp --permanent # 重新加载防火墙 firewall-cmd --reload # 下面列出相关命令给喜欢折腾的朋友(教程已完结后面不用依次执行了) # 开启防火墙 systemctl start firewalld # 关闭防火墙 systemctl stop firewalld # 删除3306端口 firewall-cmd --zone=public --remove-port=3306/tcp --permanent ``` # 附录一:cmake 参数解释 - cmake参数解释,仅解释常用配置,详细可官方文档查询,我这是阅遍后总结的 |参数 | 说明 | | ------------ | ------------ | | .. | 源码目录为上级目录 | | -DCMAKE_INSTALL_PREFIX=/usr/local/mysql | 指定MySQL安装目录 | | -DMYSQL_DATADIR=/usr/local/mysql/data | 指定MySQL数据目录 | | -DSYSCONFDIR=/usr/local/mysql/etc | 指定my.cnf选项文件目录 | | -DWITH_INNOBASE_STORAGE_ENGINE=ON | Innodb引擎 | | -DWITH_MYISAM_STORAGE_ENGINE=ON | MyISAM引擎 | | -DDEFAULT_CHARSET=utf8 | 服务器字符集,默认latin1 | | -DDEFAULT_COLLATION=utf8_general_ci | 服务器排序规则,默认latin1_swedish_ci | | -DENABLED_LOCAL_INFILE=ON | 是否为加载数据启用本地,默认为OFF | | -DMYSQL_TCP_PORT=3306 | 服务器监听端口,默认为3306 | | -DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock | Unix套接字文件路径,默认/tmp/mysql.sock | | -DWITH_INNODB_MEMCACHED=ON | 是否生成memcached共享库,默认OFF | | -DWITH_BOOST=../boost/boost_1_59_0 | Boost库源代码的位置,指向下载的源码包里,相对/绝对路径皆可 | # 附录二:my.cnf 配置文件 ``` [client] #客户端设置 port=3306 #服务器监听端口,默认为3306 socket=/usr/local/mysql-5.7.30/tmp/mysql.sock #Unix套接字文件路径,默认/tmp/mysql.sock [mysqld] #服务端设置 ## 一般配置选项 port=3306 #服务器监听端口,默认为3306 basedir=/usr/local/mysql-5.7.30 #MySQL安装根目录 datadir=/usr/local/mysql-5.7.30/data #MySQL数据文件目录 socket=/usr/local/mysql-5.7.30/tmp/mysql.sock #Unix套接字文件路径,默认/tmp/mysql.sock pid-file=/usr/local/mysql-5.7.30/tmp/mysql.pid #服务进程pid文件路径 character_set_server=utf8 #默认字符集 default_storage_engine=InnoDB #默认InnoDB存储引擎 user=mysql ## 连接配置选项 max_connections=200 #最大并发连接数 table_open_cache=400 #表打开缓存大小,默认2000 open_files_limit=1000 #打开文件数限制,默认5000 max_connect_errors=200 #最大连接失败数,默认100 back_log=100 #请求连接队列数 connect_timeout=20 #连接超时时间,默认10秒 interactive_timeout=1200 #交互式超时时间,默认28800秒 wait_timeout=600 #非交互超时时间,默认28800秒 net_read_timeout=30 #读取超时时间,默认30秒 net_write_timeout=60 #写入超时时间,默认60秒 max_allowed_packet=8M #最大传输数据字节,默认4M thread_cache_size=10 #线程缓冲区(池)大小 thread_stack=256K #线程栈大小,32位平台196608、64位平台262144 ## 临时内存配置选项 tmpdir=/tmp #临时目录路径 tmp_table_size=64M #临时表大小,默认16M max_heap_table_size=64M #最大内存表大小,默认16M sort_buffer_size=1M #排序缓冲区大小,默认256K join_buffer_size=1M #join缓冲区大小,默认256K ## Innodb配置选项 #innodb_thread_concurrency=0 #InnoDB线程并发数 innodb_io_capacity=200 #IO容量,可用于InnoDB后台任务的每秒I/O操作数(IOPS), innodb_io_capacity_max=400 #IO最大容量,InnoDB在这种情况下由后台任务执行的最大IOPS数 innodb_lock_wait_timeout=50 #InnoDB引擎锁等待超时时间,默认50(单位:秒) innodb_buffer_pool_size=512M #InnoDB缓冲池大小,默认128M innodb_buffer_pool_instances=4 #InnoDB缓冲池划分区域数 innodb_max_dirty_pages_pct=75 #缓冲池最大允许脏页比例,默认为75 innodb_flush_method=O_DIRECT #日志刷新方法,默认为fdatasync innodb_flush_log_at_trx_commit=2 #事务日志刷新方式,默认为0 transaction_isolation=REPEATABLE-READ #事务隔离级别,默认REPEATABLE-READ innodb_data_home_dir=/usr/local/mysql-5.7.30/data #表空间文件路径,默认保存在MySQL的datadir中 innodb_data_file_path=ibdata1:128M:autoextend #表空间文件大小 innodb_file_per_table=ON #每表独立表空间 innodb_log_group_home_dir=/usr/local/mysql-5.7.30/data #redoLog文件目录,默认保存在MySQL的datadir中 innodb_log_files_in_group=2 #日志组中的日志文件数,默认为2 innodb_log_file_size=128M #日志文件大小,默认为48MB innodb_log_buffer_size=32M #日志缓冲区大小,默认为16MB ## MyISAM配置选项 key_buffer_size=32M #索引缓冲区大小,默认8M read_buffer_size=4M #顺序读缓区冲大小,默认128K read_rnd_buffer_size=4M #随机读缓冲区大小,默认256K bulk_insert_buffer_size=8M #块插入缓冲区大小,默认8M myisam_sort_buffer_size=8M #MyISAM排序缓冲大小,默认8M #myisam_max_sort_file_size=1G #MyISAM排序最大临时大小 myisam_repair_threads=1 #MyISAM修复线程 skip-external-locking #跳过外部锁定,启用文件锁会影响性能 ## 日志配置选项 log_output=FILE #日志输出目标,TABLE(输出到表)、FILE(输出到文件)、NONE(不输出),可选择一个或多个以逗>号分隔 log_error=/usr/local/mysql-5.7.30/logs/error.log #错误日志存放路径 log_error_verbosity=1 #错误日志过滤,允许的值为1(仅错误),2(错误和警告),3(错误、警告和注释),默认值为3。 log_timestamps=SYSTEM #错误日志消息格式,日志中显示时间戳的时区,UTC(默认值)和 SYSTEM(本地系统时区) general_log=OFF #开启查询日志,一般选择不开启,因为查询日志记录很详细,会增大磁盘IO开销,影响性能 general_log_file=/usr/local/mysql-5.7.30/logs/general.log #通用查询日志存放路径 ## 慢查询日志配置选项 slow_query_log=ON #开启慢查询日志 slow_query_log_file=/usr/local/mysql-5.7.30/logs/slowq.log #慢查询日志存放路径 long_query_time=2 #慢查询时间,默认10(单位:秒) min_examined_row_limit=100 #最小检查行限制,检索的行数必须达到此值才可被记为慢查询 log_slow_admin_statements=ON #记录慢查询管理语句 log_queries_not_using_indexes=ON #记录查询未使用索引语句 log_throttle_queries_not_using_indexes=5 #记录未使用索引速率限制,默认为0不限制 log_slow_slave_statements=ON #记录从库复制的慢查询,作为从库时生效,从库复制中如果有慢查询也将被记录 ## 复制配置选项 server-id=1 #MySQL服务唯一标识 log-bin=mysql-bin #开启二进制日志,默认位置是datadir数据目录 log-bin-index=mysql-bin.index #binlog索引文件 binlog_format=MIXED #binlog日志格式,分三种:STATEMENT、ROW或MIXED,MySQL 5.7.7之前默认为STATEMENT,之后默认为ROW binlog_cache_size=1M #binlog缓存大小,默认32KB max_binlog_cache_size=1G #binlog最大缓存大小,推荐最大值为4GB max_binlog_size=256M #binlog最大文件大小,最小值为4096字节,最大值和默认值为1GB expire_logs_days=7 #binlog过期天数,默认为0不自动删除 log_slave_updates=ON #binlog级联复制 sync_binlog=1 #binlog同步频率,0为禁用同步(最佳性能,但可能丢失事务),为1开启同步(影响性能,但最安全不会丢失任何事务),为N操作N次事务后同步1次 relay_log=relay-bin #relaylog文件路径,默认位置是datadir数据目录 relay_log_index=relay-log.index #relaylog索引文件 max_relay_log_size=256M #relaylog最大文件大小 relay_log_purge=ON #中继日志自动清除,默认值为1(ON) relay_log_recovery=ON #中继日志自动恢复 auto_increment_offset=1 #自增值偏移量 auto_increment_increment=1 #自增值自增量 slave_net_timeout=60 #从机连接超时时间 replicate-wild-ignore-table=mysql.% #复制时忽略的数据库表,告诉从线程不要复制到与给定通配符模式匹配的表 skip-slave-start #跳过Slave启动,Slave复制进程不随MySQL启动而启动 ## 其他配置选项 #memlock=ON #开启内存锁,此选项生效需系统支持mlockall()调用,将mysqld进程锁定在内存中,防止遇到操作系统导致mysqld交换到磁盘的问题 [mysqldump] #mysqldump数据库备份工具 quick #强制mysqldump从服务器查询取得记录直接输出,而不是取得所有记录后将它们缓存到内存中 max_allowed_packet=100M #最大传输数据字节,使用mysqldump工具备份数据库时,某表过大会导致备份失败,需要增大该值(大>于表大小即可) [myisamchk] #使用myisamchk实用程序可以用来获得有关你的数据库表的统计信息或检查、修复、优化他们 key_buffer_size=32M #索引缓冲区大小 myisam_sort_buffer_size=8M #排序缓冲区大小 read_buffer_size=4M #读取缓区冲大小 write_buffer_size=4M #写入缓冲区大小 ``` # 附录三、参考链接 - https://blog.csdn.net/jwx90312/article/details/105862466
内容版权声明:本文为舒孝元原创文章,转载无需和我联系,但请注明来自
舒孝元博客:https://www.shuxiaoyuan.com/info/82
联系邮箱:sxy@shuxiaoyuan.com