0%

Centos安装Mysql

本文主要包括:

  • Centos安装Mysql

Centos安装Mysql

本文讲述Centos通过yum安装Mysql,yum本身没有mysql源,需要自己去官网下载

  1. 去官网下载yum仓库文件
    官网下载连接:https://dev.mysql.com/downloads/repo/yum/
    mysql-yum源选择
#将复制的连接地址下载
[root@localhost ~]# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

[root@localhost ~]# ls
anaconda-ks.cfg  mysql80-community-release-el7-3.noarch.rpm
  1. 安装yum仓库文件
    #可是使用rpm -ivh或者是yum localinstall 去安装,两者实质是一样的
    [root@localhost ~]# rpm -ivh mysql80-community-release-el7-3.noarch.rpm
    warning: mysql80-community-release-el7-3.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:mysql80-community-release-el7-3  ################################# [100%]
    
    #安装完成后可以看到mysql的repo文件
    [root@localhost ~]# ls /etc/yum.repos.d/
    CentOS-Base.repo  epel.repo  mysql-community.repo  mysql-community-source.repo
  2. 版本选择
    # 安装 YUM 管理工具包,此包提供了 yum-config-manager 命令工具
    [root@localhost ~]# yum -y install yum-utils
    
    [root@localhost ~]# yum-config-manager --disable mysql80-community
    [root@localhost ~]# yum-config-manager --enable mysql57-community
    
    查看默认启动的仓库
    [root@localhost ~]# yum repolist enabled | grep mysql
    mysql-connectors-community/x86_64 MySQL Connectors Community                 185
    mysql-tools-community/x86_64      MySQL Tools Community                      123
    mysql57-community/x86_64          MySQL 5.7 Community Server                 484
  3. 安装
    yum install -y  mysql-community-server
    这里会报错:
    Downloading packages:
    warning: /var/cache/yum/x86_64/7/mysql57-community/packages/mysql-community-devel-5.7.37-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
    Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
    
    
    The GPG keys listed for the "MySQL 5.7 Community Server" repository are already installed but they are not correct for this package.
    Check that the correct key URLs are configured for this repository.
    
    
    Failing package is: mysql-community-devel-5.7.37-1.el7.x86_64
    GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
    报错原因:官方 MySQL 存储库的 GPG 密钥已过期,无法安装或更新 MySQL 包
    相关报错案例可以在mysql官网查看:https://bugs.mysql.com/bug.php?id=106188
    可以在运行安装程序之前导入密钥:
    #Centos
    rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
    #Ubuntu:
    wget -q -O - https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 | apt-key add -
    之后再执行yum install -y mysql-community-server就over了
  1. 设置默认配置
    在/etc/my.cnf的文件中设置

    [mysqld]
    #配置文件根据环境自行配置,或者保持默认
    #例如添加下面几行,设置默认引擎编码和排序规则(根据情况设置合适的)
    default-storage-engine=INNODB
    character-set-server = utf8mb4
    collation-server = utf8mb4_general_ci
    skip-character-set-client-handshake
    secure_file_priv=''
    
    
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
  2. 启动服务

    # 启动
    systemctl start mysqld
    
    # 查看状态
    systemctl status mysqld
    
    # 开机自启动
    systemctl enable mysqld
    
    # 查看监听端口,默认 3306
    ss -natl |grep 3306
  3. 初始化
    MySQL服务器初始化(从MySQL 5.7开始):
    在 MySQL 服务器初始启动时,如果服务器的数据目录为空,则会发生以下情况:
    MySQL 服务器已初始化。
    在数据目录中生成SSL证书和密钥文件。
    安装并启用该 validate_password 插件。
    将创建一个超级用户 帐户‘root’@’localhost’。并会设置超级用户的密码,将其存储在错误日志文件/var/log/mysqld.log中。

    [root@localhost ~]# grep 'temporary password' /var/log/mysqld.log
    2021-01-25T04:26:33.010077Z 1 [Note] A temporary password is generated for root@localhost: *sH2qhGeN(eB
    
    #本地登录的root密码: *sH2qhGeN(eB
  4. 修改初始密码

    mysql> alter user   root@localhost   identified  by  '123456';
    ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    
    #太过简单的密码会失败,因为不满足密码复杂度的要求
    
    mysql> alter user   root@localhost   identified  by  'Gjc123!@#';
    Query OK, 0 rows affected (0.00 sec)

    要设置比较简单的密码就需要取消密码复杂度
    编辑 my.cnf配置文件, 在 [mysqld]配置块儿中添加如下内容

    plugin-load=validate_password.so
    validate-password=OFF

    保存退出后,重启服务, 修改密码

  5. 远程连接
    远程登录还需要授权远程登录
    Mysql默认不允许远程登录,我们需要设置关闭selinux或者防火墙,不关防火墙就开放3306端口;

    mysql> grant all privileges on *.* to root@localhost identified by 'Gjc123!@#';
     Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    #允许任意IP连接
     mysql> grant all privileges on *.* to root@'%' identified by 'Gjc123!@#';
     Query OK, 0 rows affected, 1 warning (0.00 sec)
    flush privileges;

    %:匹配任意长度的任意字符,常用于设置允许从任何主机登录
    _:匹配任意单个字符

#放开3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

#关闭防火墙和selinux一劳永逸

binlog开启步骤

检查binlog开启状态:

-- 如果log_bin显示为ON,则代表已开启。
show variables like 'log_%';

首先找到my.cnf:

[root@ddp5 tmp]# mysql --help | grep 'Default options' -A 1
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf

可以看到mysql优先加载/etc/my.cnf中的配置。
所以需要在/etc/my.cnf中mysqld节添加开启binlog的配置:

[mysqld]
#设置日志路径,注意路经需要mysql用户有权限写
## /data/mysql/logs/是binlog存储路径,mysql-bin是文件名
## 在该文件夹下会生成 mysql-bin.000001、 mysql-bin.index文件
log-bin = /data/mysql/logs/mysql-bin
#选择row模式
binlog_format=ROW
##配置serverid
server_id=1
#设置binlog清理时间
expire_logs_days = 7
##binlog每个日志文件大小
max_binlog_size = 100m
##binlog缓存大小
binlog_cache_size = 4m
##最大binlog缓存大小
max_binlog_cache_size = 512m

修改完配置后,重启mysql。执行SHOW VARIABLES LIKE ‘log_bin’; Value 值为 ON即可

service mysqld restart

注意:需要在[mysqld]节点下添加如上参数,否则会报错:

mysql: [ERROR] unknown variable 'log-bin=/data/mysql/logs/mysql-bin'

MySQL性能测试——tpch工具

tpch是TPC(Transaction Processing Performance Council)组织提供的工具包。用于进行OLAP测试,以评估商业分析中决策支持系统(DSS)的性能。它包含了一整套面向商业的ad-hoc查询和并发数据修改,强调测试的是数据库、平台和I/O性能,关注查询能力。

TPC-H是业界常用的一套基准,由TPC委员会制定发布,用于评测数据库的分析型查询能力。TPC-H查询包含8张数据表、22条复杂的SQL查询,大多数查询包含若干表Join、子查询和Group by聚合等。

相关链接:
tpch下载地址(TPC-H需要完成注册后才可以下载):
http://tpc.org/tpc_documents_current_versions/download_programs
tpch工具github仓库地址:
https://github.com/electrum/tpch-dbgen

tpch的安装

yum install unzip -y
unzip tpch-mysql.zip
cd tpch-mysql
cd dbgen
yum install gcc-c++
make
./dbgen -s 10
#进入数据库建表(使用root或高权限用户)有的需要手动建库tpcd

tpch的使用

mysql -uroot -p'Gjc123!@#' --local-infile
use tpch;
\. /root/TPCH/dbgen/dss.ddl;
load data local infile '/root/TPCH/dbgen/part.tbl' into table PART fields terminated by '|';
load data local infile '/root/TPCH/dbgen/region.tbl' into table REGION fields terminated by '|';
load data local infile '/root/TPCH/dbgen/nation.tbl' into table NATION fields terminated by '|';
load data local infile '/root/TPCH/dbgen/customer.tbl' into table CUSTOMER fields terminated by '|';
load data local infile '/root/TPCH/dbgen/supplier.tbl' into table SUPPLIER fields terminated by '|';

load data local infile '/root/TPCH/dbgen/orders.tbl' into table ORDERS fields terminated by '|';
load data local infile '/root/TPCH/dbgen/partsupp.tbl' into table PARTSUPP fields terminated by '|';
load data local infile '/root/TPCH/dbgen/lineitem.tbl' into table LINEITEM fields terminated by '|';

编写脚本切分文件,并导入mysql

#! /bin/bash
#文件名不带.tbl !!!,即对应表名
#read -p "please input filename: " filename
filename=orders      # 修改处1:替换文件名orders、partsupp、lineitem、
#获取原文件总行数totalline
totalline=$(cat $filename.tbl | wc -l)
echo totalline=$totalline
#要分割成的每个小文件的行数line
line=1000000   
a=`expr $totalline / $line`    
b=`expr $totalline % $line` 
#获取小文件个数filenum
if (( $b==0 ))   
then
    filenum=$a
else
    filenum=`expr $a + 1`
fi
echo filenum=$filenum
#进行文件分割,分割后第一个小文件名后缀为i,i最小值为1
i=1        # 修改处2:38 修改为1
while(( i<=$filenum ))
do
#每个小文件要截取行数在原文件范围min,max 
    p=`expr $i - 1`
    min=`expr $p \* $line + 1`
    max=`expr $i \* $line`
    sed -n "$min,$max"p ./$filename.tbl > ./$filename.tbl.$i
#将小文件导入数据库,mysql登录信息及小文件路径根据实际修改       # 修改处3:mysql连接信息(加了--local-infile)
#根据自己创建的数据库的用户名、密码、数据库实例的ip、端口号、已经tpc安装包的路径信息进行修改。
    mysql -umyroot -p'******' -h10.185.147.201 -P32307 --local-infile -Dtpcd -e "load data local infile '/root/tpch-mysql/dbgen/$filename.tbl.$i' into table $filename fields terminated by '|';"
    i=`expr $i + 1`
done

具体可以参考MySQL性能测试——tpch工具

jdbc获取mysql列信息数据异常

在实时采集mysql的时候,需要使用jdbc读取mysql的元数据,但是在实际测试过程中,发现如果多个数据库存在相同表明,指定schema和tableName并不能返回唯一的表名,默认会把所有的表都返回。
通过设置nullCatalogMeansCurrent=true来解决问题
具体可以参考mybatis-generator多个数据库存在相同的表

jdbc获取mysql表注释获取不到

在实时采集mysql的时候,需要自动建表并把自动添加注释,这里采用jdbc读取mysql的元数据。但是,在实际测试过程中,发现如果用jdbc-8.0.x获取mysql表信息,如果mysql是8.0可以正常获取,但是如果mysql版本是5.x,就获取不到注释
这里的解决办法:
通过设置useInformationSchema=true
具体可以参考JDBC Mysql Connection 获取不到表的Comments