5.6.3.2源码包安装(安装mysql-boost-5.7.44.tar.gz版本,52MB)
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
rpm -qa | grep mysql
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs #使用yum删除会将mariadb的依赖关系一并删除的,这个要注意;--nodeps表示忽略依赖关系,即只卸载mariadb-libs,而不卸载它的依赖包。
rpm -qa | grep mariadb
yum -y install cmake make gcc gcc-c++ openssl openssl-devel ncurses ncurses-devel bison bison-devel
#使用my.cnf配置文件和mysql用户初始化数据目录
[root@localhost ~]# bin/mysqld --defaults-file=/usr/local/mysql/etc/my.cnf --initialize --user=mysql
#使用mysql的初始化安装
[root@localhost ~]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
注意:这是一整条命令
cmake -DCMAKE_inSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/usr/local/mysql/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/tmp/mysql.sock -DWITH_INNODB_MEMCACHED=ON -DWITH_BOOST=boost/boost_1_59_0
解释:
-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 #开启存储引擎ON,安装InnoDB引擎
-DWITH_MYISAM_STORAGE_ENGINE=ON #开启存储引擎ON,安装MyISAM引擎
-DDEFAULT_CHARSET=utf8 #指定字符集,即语言
-DDEFAULT_COLLATION=utf8_general_ci #指定字符集
-DENABLED_LOCAL_INFILE=ON #
-DMYSQL_TCP_PORT=3306 #端口号
-DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock #
-DWITH_INNODB_MEMCACHED=ON #
DDOWNLOAD_BOOST=1 #允许在线更新boost库
-DWITH_BOOST=boost/boost_1_59_0 #指定boost
-------------------------------------------------------------------------------------------------------------------------
参考其他解释:
具体参考官方文档:
MySQL :: MySQL 8.0 Reference Manual :: 2.8.7 MySQL Source-Configuration Options
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql #:MySQL安装的根目录
-DMYSQL_DATADIR=/data/mysql #:数据文件所存放的目录
-DSYSCONFDIR=/etc #:MySQL配置文件所在目录
-DMYSQL_USER=mysql #:MySQL服务的用户名
-DWITH_MYISAM_STORAGE_ENGINE=1 #:安装MyISAM引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 #:安装InnoDB引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 #:安装Archive引擎
-DWITH_MEMORY_STORAGE_ENGINE=1 #:安装Memory引擎
-DWITH_FEDERATED_STORAGE_ENGINE=1 #:安装Federated引擎
-DWITH_PARTITION_STORAGE_ENGINE=1 #:安装Partition引擎
-DWITH_READLINE=1 #:MySQL的readline library
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock #:sock文件的路径
-DMYSQL_TCP_PORT=3306 #:MySQL的监听端口
-DENABLED_LOCAL_INFILE=1 #:启用加载本地数据
-DENABLE_DOWNLOADS=1 #:编译时允许自主下载相关文件
-DEXTRA_CHARSETS=all #:使MySQL支持所有的扩展字符
-DDEFAULT_CHARSET=utf8mb4 #:设置默认字符集为utf8mb4
-DDEFAULT_COLLATION=utf8mb4_general_ci #:设置默认字符校对
-DWITH_DEBUG=0 #:禁用调试模式
-DMYSQL_MAINTAINER_MODE=0 #:是否启用mysql维护器特定的开发环境
-DDOWNLOAD_BOOST=1 #:允许在线更新boost库
-DWITH_BOOST=…/boost #:指定boost安装路径
--------------------------------------------------------------------------------------------------------------------------------
tar -zxf mysql-boost-5.7.37.tar.gz -C /usr/src
cd /usr/src/mysql-5.7.37/
make && make install 如果虚拟机cpu在一个以上可以用make -j ,多线程同时编译会加快速度。如[root@localhost ~]# make -j2 ,(这里不要超过cpu的逻辑处理器个数,这里设为2)
安装步骤(以安装mysql-boost-5.7.44.tar为例)
#如果我们上面使用yum方法安装过mysql-community-server,先要卸载。因为等一下我们要使用源码来安装。
[root@localhost ~]# rpm -qa | grep mysql-community-server
[root@localhost ~]# rpm -e --nodeps mysql-community-server
#查询是否安装了mariada-libs(如果安装过数据库mariadb-libs,这里也要卸载,因为会冲突。)
[root@localhost ~]# rpm -qa | grep mariada-libs
#卸载mariada-libs
[root@localhost ~]#rpm -e --nodeps mariadb-libs #--nodeps 表示不卸载依赖关系
下载源码包下载带boost的包mysql-boost-5.7.44.tar.gz
版本5.7.44,到这个网站去下载:MySQL :: Download MySQL Community Server (Archived Versions)
把源码包导入linux系统/root目录下
[root@localhost ~]# rz -E #把源码包往xshell中一拖即可复制。
搭建网络yum源,因为要使用yum安装msql的依赖包
[root@localhost ~]# yum -y install cmake make gcc gcc-c++ openssl openssl-devel ncurses ncurses-devel bison bison-devel
5.6.3.2.3把源码包解压到/usr/src/下,并进入安装目录
[root@localhost ~]# tar -vxf /root/mysql-5.7.44.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/mysql-5.7.44/
[root@localhost mysql-5.7.44]# ls
BUILD dbug libbinlogevents man rapid sql-common VERSION
client Docs libbinlogstandalone mysql-test README storage vio
cmake Doxyfile-perfschema libmysql mysys regex strings win
CMakeLists.txt extra libmysqld mysys_ssl scripts support-files
config.h.cmake include libservices packaging source_downloads testclients
configure.cmake INSTALL LICENSE plugin sql unittest
#执行cmake命令
[root@localhost mysql-5.7.44]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/usr/local/mysql/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/tmp/mysql.sock -DWITH_INNODB_MEMCACHED=ON -DDOWNLOAD_BOOST=off -DWITH_BOOST=boost/boost_1_59_0
返回结果如下:
……
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/src/mysql-5.7.44 #生成的文件为Makefile,路径是/usr/src/mysql-5.7.44/Makefile
[root@localhost mysql-5.7.44]# make && make install
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
cd /usr/local/mysql #切换目录
mkdir -p /usr/local/mysql/data
mkdir -p /usr/local/mysql/etc
mkdir -p /usr/local/mysql/tmp
mkdir -p /usr/local/mysql/logs
chown -R mysql:mysql /usr/local/mysql
chmod u+wrx -R /usr/local/mysql
vim /usr/local/mysql/etc/my.cnf
示例:
1.创建组和用户
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -r -g mysql -s /bin/false mysql
2.切换目录
[root@localhost ~]# cd /usr/local/mysql
[root@localhost mysql]# pwd
/usr/local/mysql
3.在目录/usr/local/mysql下创建目录
[root@localhost mysql]# mkdir -p /usr/local/mysql/data
[root@localhost mysql]# mkdir -p /usr/local/mysql/etc
[root@localhost mysql]# mkdir -p /usr/local/mysql/tmp
[root@localhost mysql]# mkdir -p /usr/local/mysql/logs
4.修改目录的归属关系
[root@localhost mysql]# chown -R mysql:mysql /usr/local/mysql
5.创建并编辑文件
[root@localhost mysql]# vim /usr/local/mysql/etc/my.cnf
[client] #客户端设置
port=3306 #服务器监听端口,默认为3306
socket=/usr/local/mysql/tmp/mysql.sock #Unix套接字文件路径,默认是/tmp/mysql.sock
-------------------------------------------------------------------------------------------------------------------------------
[mysqld] #服务端设置
##一般配置选项
port=3306 #服务器监听端口,默认为3306
basedir=/usr/local/mysql #MySQL安装目录
datadir=/usr/local/mysql/data #MySQL数据文件目录
socket=/usr/local/mysql/tmp/mysql.sock #Unix套接字文件路径,默认是/tmp/mysql.sock
pid-file=/usr/local/mysql/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/data #表空间文件路径,默认保存在MySQL的datadir中
innodb_data_file_path=ibdata1:128M:autoextend #表空间文件大小
innodb_file_per_table=ON #每表独立表空间
innodb_log_group_home_dir=/usr/local/mysql/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/logs/error.log #错误日志存放路径
log_error_verbosity=1 #错误日志过滤,允许的值为1(仅错误),2(错误和警告),3(错误、警告和注释);默认值为3
log_timestamps=SYSTEM #错误日志消息格式,日志中显示时间戳的时区,UTC(默认值)和SYSTEM(本地系统时区)
general_log=ON #开启查询日志,一般选择不开启,因为查询日志记录很详细,会增大磁盘IO开销,影响性能。
general_log_file=/usr/local/mysql/logs/general.log #通用查询日志存放路径。
##慢查询日志配置选项
slow_query_log=ON #开启慢查询日志
slow_query_log_file=/usr/local/mysql/logs/slowq.log #慢查询日志存放路径
long_query_time=2 #慢查询时间,默认10(单位:秒)
min_examined_row_limit=100 #最小检查行限制,检索的行数必须达到此值才可被记为慢查询
log_slow_admin_statements=NO #记录慢查询管理语句
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,mysql5.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次事务后同步一次。
relay_log=relay-bin #relaylog文件路径,默认位置是datadir数据目录
relay_log_index=relay-log.index #relaylog索引文件
max_relay_log_size=256M #relaylog最大文件大小
#relay_log_pruge=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=16M #最大传输数据字节,使用mysqldump工具备份数据库时,某表过大会导致备份失败,需要增大该值(大于>表大小即可)
[myisamchk] #使用myisamchk实用程序可以用来获得有关你的数据库表的统计信息或检查、修复、优化它们
key_buffer_size=32M #索引缓冲区大小
myisam_sort_buffer_size=8M #排序缓冲区大小
read_buffer_size=4M #读取缓冲区大小
write_buffer_size=4M #写如缓冲区大小
---------------------------------------------------------------------------------------------------------------------------------
6.初始化数据库目录
#使用my.cnf配置文件和mysql用户初始化数据库
[root@localhost ~]# /usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/etc/my.cnf --initialize --user=mysql
或者使用相对路径的写法
[root@localhost mysql]# bin/mysqld --defaults-file=/usr/local/mysql/etc/my.cnf --initialize --user=mysql
初始化成功后会生成root账户的默认密码。
[root@localhost mysql]#vim /usr/local/mysql/logs/error.log
将该密码复制并保存,因为后面需要使用该密码登录到MySQL中修改密码。
或者可用查看3306端口是否已正常监听:
[root@localhost mysql]# ss -anptul | grep 3306
注意:初始化只能执行一次有效,如果想要再次初始化,必须要把目录/usr/local/mysql/data、/usr/local/mysql/tmp、/usr/local/mysql/etc、/usr/local/mysql/logs里面的内容删除,再次执行初始化才能成功。
配置环境变量(系统才能知道服务在哪里)
[root@localhost mysql]# vim /etc/profile
在文件末尾加入下面代码,然后输入:wq保存并退出(没有权限时,可使用:q!强制不保存退出,换root用户重来)
export MYSQL_HOME=/usr/local/mysql #声明安装路径(相当于告诉系统mysql安装在哪)
export PATH=$MYSQL_HOME/bin:$PATH #声明命令路径
#文件保存退出后,命令行输入下面命令,使得环境变量立即生效
source /etc/profile
---------------------------------------------------------------------------------------------------------------------------------
#把启动服务文件复制到系统服务配置目录下,改名为mysql。
(因为不是使用yum安装或者rpm安装的软件,是不能直接使用systemctl命令直接管理的,若要使用systemctl命令管理这个软件,要把启动服务文件复制到系统服务配置目录下)
[root@localhost mysql]#cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
#重新加载系统服务配置,使立即生效。
[root@localhost mysql]#systemctl daemon-reload 或chkconfig --add mysql
#启动mysql服务
[root@localhost mysql]#systemctl start mysql
#重启服务
[root@localhost mysql]#systemctl restart mysql
#查看服务状态
[root@localhost mysql]# systemctl status mysql
#查看数据库初始密码
[root@localhost mysql]#cat /var/log/mysqld.log | grep password #rpm安装时
[root@localhost mysql]#cat /usr/local/mysql/logs/error.log | grep password #源码安装时
#登录数据库
[root@localhost mysql]# mysql -uroot -p 或 mysql -u root -p
Enter password: #输入上面查到的密码
#进入数据库后第一步首先设置密码
mysql> set password=password('1234.Com');
或者
mysql> alter user root@'localhost' identified by '1234.Com';
#查看密码的策略
mysql> SHOW VARIABLES LIKE 'validate_password%';
Empty set (0.00 sec)
注意如下:
rpm安装方式:默认的密码复杂度为8位,包含数字、大小些字母、特殊符号
源码安装方式:默认没有密码策略,如下所示:
#设置密码策略
set global validate_password_length=8; #修改密码策略,修改密码最小长度
set global validate_password_policy=LOW; #设置安全级别;0宽容模式;LOW安全级别为低;
set global validate_password_mixed_case_count=0; #混合模式,0关闭大小写。
set global validate_password_number_count=0; #字母
set global validate_password_special_char_count=0; #特殊符号
#将root用户的可访问主机改为%,即任何主机都可访问。
root@mysql 01:03:16>update user set user.Host='%' where user.User='root';
#执行生效命令,使设置立即生效
root@mysql 01:03:33>flush privileges;
#退出登录
root@mysql 01:06:58>exit
5.6.3.2.10防火墙放行MySQL监听的端口3306(即允许其他主机访问mysql的3306端口)
#如果登录了数据库,就先退出登录
root@mysql 01:06:58>exit
#防火墙放行MySQL监听的端口3306(永久生效)
[root@localhost mysql]# firewall-cmd --permanent --zone=public --add-port=3306/tcp
#使防火墙配置立即生效
[root@localhost mysql]# firewall-cmd --reload