Centos 7 最小化mysql 5.7 源码编译安装
1、关闭selinux
sh-4.2# sed -i 's/enforcing/disabled/' /etc/selinux/config sh-4.2# reboot
2、卸载防火墙
sh-4.2# rpm -qa | grep "firewall" | xargs rpm -e --nodeps sh-4.2# rpm -qa | grep "iptables" | xargs rpm -e --nodeps
3、卸载mariadb
sh-4.2# rpm -qa | grep "mariadb*" | xargs rpm -e --nodeps
4、配置本地源
sh-4.2# cat /etc/yum.repos.d/GuGe.repo [GuGe] name=GuGe baseurl=ftp://192.168.1.82 gpgcheck=0 enable=1 # 这里仅适用了Centos 7 官方自带源
5、安装插件
sh-4.2# yum -y install gcc gcc-c++ ncurses ncurses-devel autoconf boost wget sh-4.2# wget https://cmake.org/files/v3.10/cmake-3.10.1.tar.gz -P /opt/ sh-4.2# mkdir -p /usr/local/cmake sh-4.2# tar -zxf /opt/cmake-3.10.1.tar.gz -C /usr/local/cmake --strip-components 1 sh-4.2# cd /usr/local/cmake/ sh-4.2# ./bootstrap && make -j8 && make install sh-4.2# wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz -P /opt/ sh-4.2# mkdir -p /usr/local/boost sh-4.2# tar -zxf /opt/boost_1_59_0.tar.gz -C /usr/local/boost/ --strip-components 1
6、创建进程组
sh-4.2# groupadd -g 306 mysql sh-4.2# useradd -g mysql -s /sbin/nologin -M mysql
7、安装mysql
sh-4.2# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25.tar.gz -P /opt/
sh-4.2# cd /opt
sh-4.2# tar -zxf mysql-5.7.25.tar.gz -C /opt/
sh-4.2# cd /opt/mysql-5.7.25
sh-4.2# cmake \
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
> -DMYSQL_DATADIR=/usr/local/mysql/data \
> -DDOWNLOAD_BOOST=1 \
> -DWITH_BOOST=/usr/local/boost \
> -DEFAULT_CHARSET=utf8mb4 \
> -DDEFAULT_COLLATION=utf8mb4_general_ci \
> -DSYSCONFDIR=/etc \
> -DWITH_MYISAM_STORAGE_ENGINE=1 \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \
> -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
> -DENABLED_LOCAL_INFILE=1 \
> -DEXTRA_CHARSETS=all \
> -DMYSQL_TCP_PORT=3306 \
> -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \
> -DWITH_DEBUG=0
sh-4.2# make -j8 && make install
8、配置mysql
sh-4.2# grep -E -v '^$|^#' /etc/my.cnf # 此文件需要手动创建 [client] default-character-set = utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci
skip-name-resolve skip-ssl [mysql] default-character-set = utf8mb4 sh-4.2# cp support-files/mysql.server /etc/init.d/mysqld sh-4.2# chmod a+x /etc/init.d/mysqld sh-4.2# sed -i '$a PATH=$PATH:/usr/local/mysql/bin' /etc/profile sh-4.2# sed -i '$a export PATH' /etc/profile sh-4.2# source /etc/profile sh-4.2# cd /usr/local/mysql sh-4.2# chown -R mysql:mysql . sh-4.2# mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ sh-4.2# chown -R root * sh-4.2# chown -R mysql data
9、启动登录
sh-4.2# service mysqld start sh-4.2# mysql -uroot -p mysql> SET PASSWORD = PASSWORD('123..com'); # 因为我用临时密码登录的,所以我做的任何操作都是无效的,必须先更改密码; mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; mysql> flush privileges;
10、忘记密码
# 启动免授权服务端 mysqld --skip-grant-tables # 修改用户名密码 update mysql.user set authentication_string=password('666') where user='root'; # 将数据读取到内存中,从而立即生效 flush privileges;
11、注意事项
- mysql5.7默认支持的boost的版本是1.59
- mysql5.7版本不再使用script下面的mysqld_install_db这个脚本来初始化,而是转移到了bin目录下面,并且该文件已经作废
- mysql5.7初始化的时候,data是自己创建的,并且data目录不能有内容,初始化的时候会自动写入内容
- mysqld初始化的时候可以选择临时密码初始化,也可以选择空密码初始化;--initialize-insecure代表空密码初始化;
- mysql5.7预编译的时候不能用utf8来作为默认字符集,而是utf8mb4;
- boost软件主要是一些扩展库,不必编译安装,默认解压即可使用;
12、常用命令
查看所有用户 SELECT DISTINCT User FROM mysql.user; 查看所有用户及权限 SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; 查看单一用户权限 show grants for 'username'@'%'; select * from mysql.user where user='username' \G 创建本地用户 CREATE USER 'user_name'@'host' IDENTIFIED BY 'password'; 创建远程用户 CREATE USER 'access'@'%' IDENTIFIED BY '123..com'; 授权用户数据库指定行权限 GRANT select,insert ON database.table to 'user'@'%'; 授权用户远程所有权限 grant all privileges on *.* to 'root'@'%' identified by '123..com'; GRANT all on *.* to 'username'@'%'; 授权用户单一权限(select、insert 、delete、update) GRANT select,insert,delete,update on *.* to 'username'@'%'; 删除指定登录用户 DROP USER 'root'@'%'; 删除用户并消除所有权限 DROP USER 'user'; 更改root密码 update mysql.user set authentication_string=password('123qwe') where user='root' and Host = 'localhost'; update user set password=password("12345") where user="root"; 更换指定登录用户密码 SET PASSWORD FOR 'username'@'localhost' = PASSWORD('password'); 刷新数据库权限 flush privileges; 选择sql文件执行 source all.sql; 查看数据库连接数 show processlist; show processlist full; 设置数据库字符集 CREATE DATABASE IF NOT EXISTS DB1 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 删除所有的二进制日志,并重新创建一个新的二进制日志 reset master; 从slave删除主从复制关系的位置信息,并完全的清理复制连接参数信息 reset slave all; 查看数据库全局默认字符集 show variables like'%char%'; 查看数据库全局默认校对规则 SHOWVARIABLES LIKE 'COLLATION'; 查看当前安装的 MySQL 所支持的字符集 show charset; 查看指定数据库的字符集 SHOW CREATE DATABASE db_name; 查看表编码 SHOW CREATE TABLE tbl_name; 查看字段编码 SHOW FULL COLUMNS FROM tbl_name;
# 设置密码 sh-4.2# mysqladmin -uroot -p password 'password' # 整备 sh-4.2# mysqldump -uroot -p -haddress -A > all.sql # 压缩备份 sh-4.2# mysqldump -uroot -p -h DB1 2> /dev/null | gzip > all.sql.gz # 指定备份数据库备份 sh-4.2# mysqldump -uroot -p -haddress --databases DB1 DB2 ... > all.sql # 根据binlog备份 sh-4.2# mysqlbinlog mysql-bin.* > all.sql # mysqldump还原 sh-4.2# mysqldump -uroot -p -h DB1 DB2 ... < all.sql # 压缩还原 sh-4.2# gunzip -C all.sql.gz | mysql -uroot -p DB1 #压缩备份还原 #根据时间段来还原数据库 sh-4.2# mysqlbinlog --start-datetime="2010-09-29 18:00:00" --stop-datetime="2010-09-29 23:00:00" mysql-bin.000002 | mysql -uroot -p #根据起始位置来还原 sh-4.2# mysqlbinlog --start-position=370 --stop-position=440 /var/lib/mysql/mysql-bin.000002 # 根据数据库进行还原 sh-4.2# mysqlbinlog -d DB1 /var/lib/mysql/mysql-bin.000002 # 根据数据库所在IP来分-h sh-4.2# mysqlbinlog -h 192.1681.102 /var/lib/mysql/mysql-bin.000002 #根据数据库端口来还原 sh-4.2# mysqlbinlog -p 13306 /var/lib/mysql/mysql-bin.000002 # 根据数据库serverid来还原 sh-4.2# mysqlbinlog --server-id=1 /var/lib/mysql/mysql-bin.000002 #上面的例子是可以组合使用
心若向阳,无谓悲伤!