Contents
Mysql-源码安装并配置
1.下载源码mysql
#本次安装使用版本:MYSQL 5.7.30
Mysql5.7版本更新后有很多变化,比如json等,连安装都有变化,他安装必须要BOOST库,不过mysql的官网源码有带boost库的源码和不带boost库的源码两种,因此有两种安装方式,其实都是一样的,仅仅是不带boost库源码的需要单独安装boost。
官网地址:https://dev.mysql.com/downloads/mysql/

#选择带有boost头信息的版本

#上传安装包

2. 删除系统自带 mysql,mariadb
[root@mysite ~]# yum -y remove mysql-*
[root@mysite ~]# yum -y remove mariadb-*
[root@mysite ~]# ls /var/lib/mysql
ls: cannot access /var/lib/mysql: No such file or directory
3.安装依赖包
[root@mysite ~]# yum -y install gcc gcc-c++ autoconf automake zlib* libxml* ncurses-devel libtool-ltdl-devel* make cmake openssl openssl-devel
4.添加用户和组
[root@mysite ~]# useradd -M -s /sbin/nologin mysql
[root@mysite ~]# id mysql
uid=1001(mysql) gid=1001(mysql) groups=1001(mysql)
5.创建安装、数据存放目录
#生产环境建议增加一块硬盘挂载作 mysql 目录,自用所以就不做了
[root@mysite ~]# mkdir -p /usr/local/mysql/data
6.解压并进行安装
[root@mysite ~]# tar -zxf ./mysql-boost-5.7.30.tar.gz -C /usr/local/src/
[root@mysite ~]# cd /usr/local/src/mysql-5.7.30/
#使用cmake安装,直接复制
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_BOOST=boost \
-DMYSQL-USER=mysql
#出现以下信息,可以进行编译安装了。

[root@mysite mysql-5.7.30]# make -j 4 && make install
#编译安装mysql,需消耗大量CPU资源,期间最好不要操作其他东西。
#统计所使用的时间,23:06分开始

#出现的错误
#错误1:

Linking CXX executable mysqlxtest
[ 76%] Built target mysqlxtest
make[1]: *** [sql/CMakeFiles/sql.dir/all] Error 2
make: *** [all] Error 2
把内存加到4G之后,没有出现该报错。
#错误2:据说是内存不足所引致
make[2]: *** [sql/CMakeFiles/sql.dir/item_geofunc.cc.o] Error 4
make[2]: *** Waiting for unfinished jobs....
[root@mysite ~]# free
total used free shared buff/cache available
Mem: 2044056 1908884 70724 524 64448 18708
Swap: 2097148 2093480 3668
把内存加到4G之后,没有出现该报错。
安装mysql5.7最好配4G内存
7.编辑配置文件
[root@mysite ~]# vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql datadir=/usr/local/mysql/data port=3306 socket=/usr/local/mysql/mysql.sock character-set-server=utf8 log-error=/var/log/mysqld.log pid-file=/tmp/mysqld.pid
[mysql]
socket=/usr/local/mysql/mysql.sock
[client]
socket=/usr/local/mysql/mysql.sock
8.添加 path 路径
#添加变量
[root@mysite ~]# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
#使其生效
[root@mysite profile.d]# chmod +x /etc/profile.d/mysql.sh
[root@mysite profile.d]# source /etc/profile.d/mysql.sh
9.生成服务脚本
[root@mysite profile.d]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
10.初始化数据库
[root@mysite profile.d]# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
出现如下报错:
2020-07-01T09:05:11.837431Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2020-07-01T09:05:11.852019Z 0 [ERROR] Could not open file '/var/log/mysqld.log' for error logging: Permission denied
2020-07-01T09:05:11.852091Z 0 [ERROR] Aborting
解决方法:
[root@mysite profile.d]# cd /var/log
[root@mysite log]# touch mysqld.log
[root@mysite log]# chown mysql.mysql mysqld.log
重新执行:
[root@mysite log]# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
[root@mysite log]# echo $?
0
#初始化成功
11.启动服务
[root@mysite ~]# /etc/init.d/mysqld start
报错:
Starting MySQL… ERROR! The server quit without updating PID file (/tmp/mysqld.pid).
解决方法:
查看了一下,由于sock文件指定在/usr/local/mysql下,而mysql 文件的拥有者是属于root而非mysql,因此mysql 并没有在目录的写入权限,因此需修改该目录的拥有者。
[root@mysite ~]# ls -l /usr/local/mysql
[root@mysite ~]# cd /usr/local
[root@mysite local]# chown -R mysql.mysql ./mysql
[root@mysite local]# ls -l mysql
[root@mysite local]# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
[root@mysite local]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
出现另外一个错误:
#mysql并没有添加进环境变量当中
[root@mysite local]# mysql
-bash: mysql: command not found
[root@mysite local]# echo PATH
PATH
[root@mysite local]# echo $PATH
/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#原因是:
原因是执行脚本用./mysql.sh的方式,如果采用source startup.sh,则环境变量会生效。
#解决方法:
[root@mysite profile.d]# source mysql.sh
[root@mysite profile.d]# echo $PATH
/usr/local/mysql/bin:/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#另外一种添加服务的方法
cat > /etc/systemd/system/mysql.service <<EOF
[Unit]
Description=Mysql Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecReload=/bin/kill -HUP \$MAINPID
Restart=always
[Install]
WantedBy=multi-user.target
EOF
#再次用命令启动
[root@mysite ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.30 Source distribution
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
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> set password for root@localhost=password('******');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
扩展:
"source"和"."的功能是一样的,可以调用脚本,并将脚本里的函数也传递到当前的脚本或者解释器中,即不会开启新的bash而是在当前bash中运行。
"sh"后面跟脚本名称,则不会将该脚本的函数传递进来,即需要开启新的bash,"sh"实际上是执行一个脚本,最后执行完毕会将内存释放掉,不会保存变量。
而"."和"source"则不会新的bash进程,这就是为什么在/etc/init.d/这个目录下有很多的脚本都会用"."去调用脚本。
综上所述:
生产环境中编写脚本一般会使用sh命令去执行脚本,因为使用sh命令执行的脚本执行完毕后会自动释放内存并不会影响当前进程中的变量。除非你明确直到想要脚本中的变量要在当前bash中生效(比如重新读取配置文件)则可以使用"source"或者"."
12.开机启动
[root@mysite mysql]# ls -l /etc/init.d/mysqld
-rwxr-xr-x 1 root root 10576 Jul 1 17:01 /etc/init.d/mysqld
[root@mysite mysql]# chkconfig --add mysqld
[root@mysite mysql]# chkconfig mysqld on
[root@mysite mysql]# chkconfig
#配置文件里面已经配好开关机顺序:

13.进入命令
[root@wordpress local]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.30 Source distribution
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.