centos6、7通用,mysql5.7通用
一、源码编译安装
1、下载安装包
mysql: https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/ 国内各镜像源都可以
boost:https://www.boost.org/users/download/ 注意从MySQL 5.7.5开始,Boost库是必需的,目前mysql5.7.34编译选项要求boost1.59以上版本
cmake:https://cmake.org/download/ yum安装的cmake可能会报版本低不可用,建议安装高版本
[root@42545fda83bb]> ls /usr/local/src
mysql-5.7.34.tar.gz
boost_1_59_0.tar.gz
cmake-3.8.0-rc2.tar.gz
2、安装基本依赖包
[root@42545fda83bb]> yum install -y gcc gcc-c++ pcre pcre-devel ncurses-devel make perl autoconf automake zlib libxml libgcrypt libtool bison zlin-devel openssl-devel
3、解压包,创建目录,创建用户,目录授权,源码编译安装cmake
[root@42545fda83bb]> groupadd mysql && useradd -g mysql -s /sbin/nologin -M mysql
[root@42545fda83bb]> mkdir /data/mysql/{data,etc,log}
[root@42545fda83bb]> tar -zxvf cmake-3.8.0-rc2.tar.gz -C /data
[root@42545fda83bb]> tar -zxvf boost_1_59_0.tar.gz -C /data
[root@42545fda83bb]> tar -zxvf mysql-5.7.34.tar.gz
[root@42545fda83bb]> cd /data/cmake-3.8.0-rc2
[root@42545fda83bb cmake-3.8.0-rc2]> ./bootstrap
[root@42545fda83bb cmake-3.8.0-rc2]> make && make install
5、编译安装mysql主步骤
源码编译mysql常用参数:
CMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/local/mysql #
DEFAULT_CHARSET:指定服务器默认字符集,默认latin1 #
DEFAULT_COLLATION:指定服务器默认的校对规则,默认latin1_general_ci #
ENABLED_LOCAL_INFILE:指定是否允许本地执行LOAD DATA INFILE,默认OFF #
WITH_COMMENT:指定编译备注信息 #
WITH_xxx_STORAGE_ENGINE:指定静态编译到mysql的存储引擎,MyISAM,MERGE,MEMBER以及CSV四种引擎默认即被编译至服务器,不需要特别指定。
WITHOUT_xxx_STORAGE_ENGINE:指定不编译的存储引擎 # SYSCONFDIR:初始化参数文件目录 # MYSQL_DATADIR:数据文件目录 # MYSQL_TCP_PORT:服务端口号,默认3306 # MYSQL_UNIX_ADDR:socket文件路径,默认/tmp/mysql.sock
[root@42545fda83bb]> cd /usr/local/src/mysql-5.7.34
/data/cmake-3.8.0-rc2/bin/cmake \
-DCMAKE_INSTALL_PREFIX=/data/mysql \
-DMYSQL_DATADIR=/data/mysql/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_USER=mysql \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/data/boost_1_59_0
[root@42545fda83bb]> make -j 4 && make install
#目录授权
[root@42545fda83bb]> chown -R mysql:mysql /data/mysql
PS:出错后重新运行配置,需要删除CMakeCache.txt文件
make clean
rm -f CMakeCache.txt
mysql5.7.8的make编译, 如果是阿里云centos主机512M内存的, 会在make编译到45%时会报错, 这是内存不足所致。
c++: Internal error: Killed (program cc1plus)
Please submit a full bug report.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
make[2]: *** [sql/CMakeFiles/sql.dir/item_geofunc.cc.o] Error 1
make[1]: *** [sql/CMakeFiles/sql.dir/all] Error 2
make: *** [all] Error 2
那么设置2G交换分区来用下 :
dd if=/dev/zero of=/swapfile bs=1k count=2048000 --获取要增加的2G的SWAP文件块
mkswap /swapfile -- 创建SWAP文件
swapon /swapfile -- 激活SWAP文件
swapon -s -- 查看SWAP信息是否正确
echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab -- 添加到fstab文件中让系统引导时自动启动
注意, swapfile文件的路径在/var/下
编译完后, 如果不想要交换分区了, 可以删除:
swapoff /swapfile
rm -fr /swapfile
6、增加环境变量
[root@42545fda83bb]> vim /etc/profile
export LANG=Zh_CN.UTF-8
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/data/mysql/bin
[root@42545fda83bb]> source /etc/profile
7、初始化创建实例,注意保存末尾输出的12位随机密码,首次登录会用到
[root@42545fda83bb]> /data/mysql/bin/mysqld --initialize --user=mysql --explicit_defaults_for_timestamp=1 --basedir=/data/mysql --datadir=/data/mysql/data
2022-01-17T09:07:50.522488Z 0 [Warning] InnoDB: New log files created, LSN=45790
2022-01-17T09:07:50.552039Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2022-01-17T09:07:50.606344Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: f2437bba-7774-11ec-9bdc-0242ac11000f.
2022-01-17T09:07:50.606855Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2022-01-17T09:07:51.346539Z 0 [Warning] CA certificate ca.pem is self signed.
2022-01-17T09:07:51.375171Z 1 [Note] A temporary password is generated for root@localhost: E1hNNP<1tpZo
8、准备mysql配置文件
[root@42545fda83bb]> vim /data/mysql/etc/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
server_id=10
port = 3306
user = mysql
socket = /data/mysql/data/mysql.sock
basedir = /data/mysql
datadir = /data/mysql/data
pid-file = /data/mysql/data/mysql.pid
max_connections = 1000
max_connect_errors = 1000
table_open_cache = 1024
max_allowed_packet = 128M
open_files_limit = 65535
##log
log_error = /data/mysql/log/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/log/mysql-slow.log
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
9、创建日志文件(配置文件指定的话就要创建,启动不会自动创建,会报错,没指定的话不创建也可以),启动服务
[root@42545fda83bb mysql]> touch /data/mysql/log/mysql-error.log
[root@42545fda83bb mysql]> touch /data/mysql/log/mysql-slow.log
[root@42545fda83bb mysql]> chown -R mysql:mysql /data/mysql/
命令启动(不常用),用下面步骤服务的方式更方便
[root@42545fda83bb mysql]> /data/mysql/bin/mysqld_safe --defaults-file=/data/mysql/etc/my.cnf --user=mysql &
[1] 34345
[root@42545fda83bb mysql]> 2022-01-17T09:47:25.475018Z mysqld_safe Logging to '/data/mysql/log/mysql-error.log'.
2022-01-17T09:47:25.508501Z mysqld_safe Starting mysqld daemon with databases from /data/mysql/data
10、准备服务,增加执行权限
[root@42545fda83bb mysql]> cp /data/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@42545fda83bb mysql]> chmod 755 /etc/init.d/mysqld
启动服务
[root@42545fda83bb mysql]> service mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
[root@42545fda83bb mysql]> ps -ef | grep mysql
root 33975 0 0 09:35 pts/1 00:00:00 /bin/sh /data/mysql/bin/mysqld_safe --datadir=/data/mysql/data --pid-file=/data/mysql/data/mysql.pid
mysql 34277 33975 0 09:35 pts/1 00:00:00 /data/mysql/bin/mysqld --basedir=/data/mysql --datadir=/data/mysql/data --plugin-dir=/data/mysql/lib/plugin --user=mysql --log-error=/data/mysql/log/mysql-error.log --open-files-limit=65535 --pid-file=/data/mysql/data/mysql.pid --socket=/data/mysql/data/mysql.sock --port=3306
[root@42545fda83bb mysql]> ss -lntp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::3306 :::*
11、测试登录,修改密码
[root@42545fda83bb mysql]> mysql -hlocalhost -uroot --socket=/data/mysql/data/mysql.sock
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.34-log Source distribution
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW DATABASES;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
#需要修改初始密码
mysql> alter user 'root'@'localhost' identified by '123456';
#授权远程登录
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
mysql> quit;
mysql> exit;(与上等效, 都是退出mysql连接)
二、二进制安装mysql5.7
二进制安装相对比较简单方便
1、准备安装包,创建软链接
cd /usr/local/src
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
tar -zxvf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
ln -sv /usr/local/src/mysql-5.7.34-linux-glibc2.12-x86_64 /usr/local/mysql
2、安装依赖包
yum install -y gcc-c++ readline-devel zlib-devel bison cmake
3、创建用户、数据目录、授权
groupadd mysql && useradd -g mysql -s /sbin/nologin -M mysql
mkdir -p /data/mysql/{data,log}
touch /data/mysql/log/{mysql-error,mysql-slow}.log
chown -R mysql:mysql /data/mysql /usr/local/mysql
4、数据库初始化创建实例
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data #注意保存末尾的随机密码
/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/data/mysql/data
5、准备配置文件、准备服务、启动服务
》》》》》》》》》》准备配置文件
mv /etc/my.cnf /etc/my.cnf.bak
vim /etc/my.cnf
[client]
port = 3306
socket = /data/mysql/mysql.sock
[mysqld]
server_id=10
port = 3306
user = mysql
socket = /data/mysql/mysql.sock
basedir = /usr/local/mysql
datadir = /data/mysql/data
pid-file = /data/mysql/data/mysql.pid
max_connections = 1000
max_connect_errors = 1000
table_open_cache = 1024
max_allowed_packet = 128M
open_files_limit = 65535
# [innodb] ##innodb的可以先不设置,不然启动会报错
innodb_buffer_pool_size = 1024M
innodb_file_per_table = 1
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_purge_threads = 2
innodb_flush_log_at_trx_commit = 1
innodb_log_file_size = 512M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 16M
innodb_max_dirty_pages_pct = 80
innodb_lock_wait_timeout = 30
innodb_data_file_path=ibdata1:1024M:autoextend
##log
log_error = /data/mysql/log/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/log/mysql-slow.log
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
》》》》》》》》》》准备服务、启动服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile && source /etc/profile
/etc/init.d/mysqld start
cat /data/mysql/log/mysql-error.log
6、修改密码,开启远程登录,刷新权限
mysql -uroot -p
********
[mysql] > set password=password('123123');
[mysql] > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
[mysql] > FLUSH PRIVILEGES;