• [MySQL数据库部署及初始化相关]


    一、MySQL安装前系统环境检测

    1.selinux和iptables需要关闭

    1. cat /etc/sysconfig/selinux
    2. sed -i 's/enable/disable/g' /etc/sysconfig/selinux
    3. chkconfig --list|grep iptables
    4. chkconfig iptables off
    5. chkconfig --list|grep iptables

    2.I/O调度系统默认是cfq模式,这里强烈建议使用deadline模式

    查看I/O调度文件

    1. cat /sys/block/sda/queue/scheduler
    2. 输出结果为:
    3. noop anticipatory deadline [cfq]
    4. 或者
    5. noop [deadline] cfq

    修改I/O调度器,需要在/etc/grub.conf中加入elevator=deadline,保证永久有效
    echo “elevator=deadline” >> /etc/grub.conf

    3.swap分区设置

    swappiness值大小对如何使用swap分区有很大影响。有0和100两个极限值,0代表最大限度地使用物理内存,然后才使用swap分区,这种行为有可能导致内存溢出,出现OOM错误,从而导致MYSQL被意外kill掉,所以需要谨慎设置。100是积极使用swap分区,并把内存上边的数据及时搬到swap分区里(不建议)
    这里建议不分配swap,或者分配4GB就够了

    查看swappiness文件:

    1. cat /proc/sys/vm/swappiness
    2. sysctl -a | grepswap
    3. vm.swap_token_timeout = 300 0
    4. vm.swappiness = 60

    想要修改swappiness的值,编辑/etc/sysctl.conf,加入vm.swappiness的值即可。

    4.文件系统选择

    建议使用xfs文件系统,相比ext4,它更方便管理,支持动态扩容,删除文件也方便

    5.操作系统限制

    ulimit -a
    

    注意两个参数

    open files max user processes

    open files如果设置不合理,而当前服务器的连接数过多或者表过多时,就可能会出现打不开或者访问不了表的现象 。默认情况下,linux的最大句柄数为1024个,表示单个进程最多可以访问1024个文件句柄,如果超过默认值,就会出现文件句柄超限的错误"too many open files"

    max user processes

    max user processes 参数的用途是,有时候我们可能会跑很多实例,但发现创建不了新的连接,报出"resource temporarily unavailable"错误,表示没有足够的资源

    为了防止上述两种报错,修改系统的软硬限制,编辑/etc/security/limits.conf,加入限制的相关内容。并重启操作系统生效。

    1. cat /etc/security/limits.conf 下边有
    2. * soft nproc 65535
    3. * hard nproc 65535
    4. * soft nofile 65535
    5. * hard nofile 65535

    6.numa关闭

    关闭numa功能,可以更好分配内存,不需要采取swap方式获取内存。使用swap可能导致数据库性能下降
    关闭方式在BIOS、操作系统中关闭,或者在数据库启动过程中关闭

    numa --interleave=all /usr/local/mysql/bin/mysqld_safe -defaults-file=/etc/my.cnf &
    

    二、MySQL 5.7版本安装

    创建mysql用户,指定mysql所在用户组

    1. groupadd mysql
    2. useradd -g mysql mysql -s /sbin/nologin

    软件包家目录(basedir)统一规格放在/usr/local/下面:

    cd /usr/local/  
    

    解压mysql软件包:

    tar -zxvf mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz
    

    然后做个软连接,方便日后升级

    ln -s mysql-5.7.14-linux-glibc2.5-x86_64 mysql  
    

    给mysql目录授权

    chown mysql:mysql -R mysql
    

    创建mysql数据库的数据目录(datadir),可以选择创建在/data/mysql下

    mkdir -p /data/mysql  
    

    目录授权

    chown mysql:mysql -R /data/mysql
    

    创建/etc/my.cnf文件,修改相关配置
    vim /etc/my.cnf //修改相关配置

    1. 26 [mysqld]
    2. 27 datadir = /data/mysql 添加这一行,指定数据保存路径

    使用mysqld命令初始化数据库

    1. cd /usr/local/mysql/bin/
    2. ./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/ --user=mysql --initialize

    注:如果在初始化过程中加上–initialize参数,表示会生成一个临时的数据库初始化密码,记录在log-error(错误日志)里边, 如果加上–initialize-insecure参数,代表无密码进入,建议使用生成初始化密码的方式。

    启动数据库过程:

    1. cd /usr/local/mysql/bin/
    2. ./mysqld_safe --defaults-file=/etc/my.cnf &

    数据库启动成功后,进入数据库的初始化密码会在/data/mysql/error.log下面:

    cat /data/mysql/error.log | grep password
    

    使用初始化密码进入数据库之后,修改数据库root密码,设置为永不过期:

    1. mysql>set password = 'root123';
    2. mysql>ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
    3. mysql>flush privileges;

    ##update user set password=password(‘root123’) where user=‘root’;

    //低于mysql 5.7版本的数据库需要安全加固,只保留数据库中用户为root、host为localhost的账号
    语句如下:

    delete from user where user!='root' or host!='localhost';
    

    关闭数据库

    1. cd /usr/local/mysql/bin
    2. ./mysqladmin -uroot -proot123 shutdown

    非正常关闭,可以kill掉mysql进程

    三、information_schema下常用表:

    • tables (记录所有表到的基本信息是,访问该表可收集的统计信息)
    • processlist(查看当前数据库的连接).也可以使用show processlist;
    • GLOBAL_STATUS(查看数据库运行的各种状态值)
    • GLOBAL_VARIABLES(查看数据库中的参数)
    • PARTITIONS(数据库中表分区的情况)
    • INNODB_LOCKS、INNODB_TRX、INNODB_LOCK_WAITS这三张表用来监控数据库中锁的情况
    • user(用于管理数据库中的用户权限信息)

    四、mysql密码丢失

    1.my.cnf增加一行

    在my.cnf里的[mysqld]下增加skip-grant-tables

    重启

    2.带有–-skip-grant-tables参数启动跳过权限表

    登不上
    看是否可以强制停库(需要确认),查看mysql进程号,并kill进程

    1. ps -ef | grep mysql
    2. mysql 5097 3807 2 12:22 pst/0 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file…
    3. kill -9 5097 3807

    然后跳过权限表参数,重启数据库

    ./mysql_safe --defaults-file=/etc/my.cnf --skip-grant-tables &  mysql
    

    或者

    service mysqld start --skip-grant-tables
    

    给root用户设置新的密码并刷新权限,mysql 5.7之后,mysql库下的password字段用authentication_string字段代替

    1. use mysql;
    2. update user set authentication_string=password('root') where user='root';
    3. flush privileges;

    五、mysql数据库连接方式

    linux下两种连接方式TCP/IP连接方式和Socket
    TCP/IP方式,mysql检查一张权限表,判断发起请求的客户端ip是否允许连接到mysql实例,该表就是mysql库下的user表

    mysql -u username -p password -P port -h IP
    

    UNIX Socket连接方式不是网络协议,只能在mysql客户端和数据实例在同体台服务器时使用。可以在配置文件中指定套接字文件的路径

    1. 如socket=/tmp/mysql.sock
    2. mysql -u username -p password -S /tmp/mysq.sock

    六、用户权限

    超管权限用户和普通用户

    1.超户

    超管: root和all privileges权限用户

    mysql 5.6

    1. use mysql;
    2. select user,host,password from user;
    3. ##root

    mysql 5.7

    1. use mysql;
    2. select user,host,authentication_string from user;
    3. ##root
    4. ##mysql.sys


    2.普通用户

    create user 用户名@主机ip identified by ‘密码’;
    为了数据库的安全性,主机IP避免使用%,可以分配IP地址的一个网段 。注意权限问题

    给开发人员的权限分配规则,可以只分配只读权限和读写权限
    注:不要给用户建表,改表(create,alter)等权限
    只读权限只能查询,不能进行DML操作
    读写权限包含insert、update、delete、select

    例:
    只读用户:

    1. create user 'usr_read'@'172.20.10.%' identified by 'mysql123';
    2. grant select on dbname.* to 'usr_read'@'172.20.10.%' identified by 'mysql123';
    3. flush privileges;

    读写用户:

    1. create user 'usr_readwrite'@'172.20.10.%' identified by 'mysql123';
    2. grant select,insert,update,delete on dbname.* to 'usr_read'@'172.20.10.%' identified by 'mysql123';
    3. flush privileges;

     

  • 相关阅读:
    SpringBoot中任务是什么/Quartz和SpringTask在Spring Boot中怎么使用/SpringBoot怎么给用户发邮件
    ALevel生物vs普高生物的区别
    python第三次作业
    SpringCloud-gateway网关入门使用
    单点登录SSO的含义
    无为WiFi的一批服务器
    链接生成-链接生成器-免费批量在线链接生成器
    Pointpillar 论文解读
    Linux命令行管理文件(练习题)
    可视化看板有那么多应用场景,该如何快速搭建?可视化工具该如何选择?
  • 原文地址:https://blog.csdn.net/weixin_47308871/article/details/126651967