in MySQL ~ read.

MySQL8安装使用

近期由于需要测试MySQL的tpcc,与我们自己的数据库进行对比,所以做了一下相关了解;

非源码安装

环境

$ uname -a
Linux xcloud41 3.10.0-327.el7.x86_64 #1 SMP Thu Oct 29 17:29:29 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	RedHatEnterpriseServer
Description:	Red Hat Enterprise Linux Server release 7.2 (Maipo)
Release:	7.2
Codename:	Maipo

下载

于官方网站选择自己的版本下载 MySQL
我的版本为:mysql-8.0.17-el7-x86_64.tar.gz

使用

因为是非源码安装,所以只要解压就可以直接使用了

安装

tar zxf mysql-8.0.17-el7-x86_64.tar.gz
cd mysql-8.0.17-el7-x86_64
mkdir data
mkdir tmp
mkdir logs
mkdir etc

配置

[mysql-8.0.17-el7-x86_64]$ cat etc/my.cnf 
[mysqld]
socket = /ssd_tmp/harvey/mysql817/mysql-8.0.17-el7-x86_64/tmp/mysql.sock
# 服务ID
server-id = 1
# 设置3306端口
port = 13307
# 设置mysql的安装目录
basedir = /ssd_tmp/harvey/mysql817/mysql-8.0.17-el7-x86_64
# 设置mysql数据库的数据的存放目录
datadir = /ssd_tmp/harvey/mysql817/mysql-8.0.17-el7-x86_64/data
# 允许最大连接数
max_connections = 200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors = 10
# 服务端使用的字符集默认为UTF8
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 创建新表时将使用的默认存储引擎
default-storage-engine = INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin = mysql_native_password
# binlog
# log-bin = mysql-bin
# binlog_format = mixed
disable-log-bin
# mysqlx 多实例
mysqlx = OFF
mysqlx_port = 33070
mysqlx_socket = /ssd_tmp/harvey/mysql817/mysql-8.0.17-el7-x86_64/tmp/mysqlx.sock

启动

由于我不需要作为服务使用它,仅做测试,所以随时停止启动。

  • 启动脚本
[mysql-8.0.17-el7-x86_64]$ cat start.sh 
CUR_PATH=`pwd`
CUR_USER=`whoami`

# 初始化
#./bin/mysqld --defaults-file=$CUR_PATH/etc/my.cnf --initialize-insecure --user=${CUR_USER} --datadir=$CUR_PATH/data --basedir=$CUR_PATH --log-error=$CUR_PATH/logs/mysql.err
# 启动
./bin/mysqld --defaults-file=$CUR_PATH/etc/my.cnf &

MySQL初次使用需要初始化,所以去掉初始化的注释,注释掉启动命令,进行初始化;
初始化完成后,就不再需要执行初始化命令,只需启动即可

  • 停止
    直接kill -9 pid即可, 抑或使用正常的停止流程
[mysql-8.0.17-el7-x86_64]$ cat stop.sh 
CUR_PATH=`pwd`
CUR_USER=`whoami`

#./bin/mysqld stop --defaults-file=$CUR_PATH/etc/my.cnf --datadir=$CUR_PATH/data --basedir=$CUR_PATH --log-error=$CUR_PATH/logs/mysql.err
mysql_socket=`sed -n '/^socket = /p' etc/my.cnf | awk '{print $3}'`
./bin/mysqladmin -u root --socket=$mysql_socket shutdown
#./bin/mysqladmin -u root --socket=/ssd_tmp/harvey/mysql817/mysql-8.0.17-el7-x86_64/tmp/mysql.sock shutdown 

mysqld的停止方式,在我这里失败,因为它总是读取/etc/my.cnf的配置;
所以我是用mysqladmin的方式指定socket停止;
MySQL的停止,参考MySQL的停止

  • 客户端连接脚本
[mysql-8.0.17-el7-x86_64]$ cat client.sh 
CUR_PATH=`pwd`
./bin/mysql --user=root --port=13307 --host=172.16.44.40
#./bin/mysql -uroot -p --socket=/ssd_tmp/harvey/mysql817/mysql-8.0.17-el7-x86_64/tmp/mysql.sock
# use mysql;
# select host from user where user = 'root';
# update user set host = '%' where user ='root';
# flush privileges;

初次使用时,默认root密码为空,且只允许localhost访问,无法远程访问;
为方便远程连接,先去掉socket连接方式的注释,注释掉host连接方式;
输入密码时,因密码为空,回车即可;
连接成功后,执行下面sql语句,使允许任意地址连接;

use mysql;
select host from user where user = 'root';
update user set host = '%' where user ='root';
flush privileges;

此后,就可以使用第一种连接方式进行连接。