MySQL管理员篇

  • 安装与升级

    • 二进制包安装

      • 依赖

        • mysql依赖libaio库,如果没有这个库,数据目录和启动mysql会失败

        • shell> groupadd mysql

        • shell> useradd -r -g mysql mysql

        • shell> cd /usr/local

        • shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz

        • shell> ln -s full-path-to-mysql-VERSION-OS mysql

        • shell> cd mysql

        • shell> mkdir mysql-files

        • shell> chmod 770 mysql-files

        • shell> chown -R mysql .

        • shell> chgrp -R mysql .

        • shell> bin/mysql_install_db --user=mysql    # Before MySQL 5.7.6

        • shell> bin/mysqld --initialize-security  --user=mysql # MySQL 5.7.6 and up

        • shell> bin/mysql_ssl_rsa_setup              # MySQL 5.7.6 and up

        • shell> chown -R root .

        • shell> chown -R mysql data mysql-files

        • shell> bin/mysqld_safe --user=mysql &

        • # Next command is optional

        • shell> cp support-files/mysql.server /etc/init.d/mysql.server

    • 源码安装

      • 依赖

        • CMake

        • make

        • ansi c++编译器

        • 如果想要运行test脚本,perl被需要

      • 步骤

        • groupadd mysql

        • useradd -r -g mysql mysql

        • tar zxvf mysql-version.tar.gz

        • cd mysql-version

        • cmake .                        [这里可以携带参数]-DCMAKE_INSTALL_PREFIX=安装目录

        • make

        • make install

        • cd /usr/local/msyql

        • chown -R mysql:mysql .

        • bin/mysql_install_db --user=mysql [5.7.6之前版本]

        • bin/mysqld --initialize-insecure --user=mysql [5.7.6 及以后版本]

        • bin/mysql_ssl_rsa_setup [5.7.6 及以后需版本]

        • chown -R root .

        • chown -R mysql:mysql 数据库数据目录 

        • bin/mysqld_safe --user=mysql &

    • 升级

      • yum包升级

        • yum update mysql-server

        • 重启mysql服务器

        • 运行mysql_upgrade

      • 步骤

        • 方案一

          • 停止mysql5.6服务器

          • 升级mysql-server

          • 启动mysql服务器

          • 运行mysql_upgrade

        • 方案二

          • mysqldump --all-databases --routings --events --add-drop-tables --flush-privileges=0 > data-for-upgrade.sql

          • 停止mysql5.6服务器

          • 安装mysql5.7

          • 初始化数据目录 mysqld --initialize --datadir=目录

          • 启动服务器使用新的数据目录

          • mysql>source data-for-upgrade.sql

          • 运行mysql_upgrade升级系统表等

      • 如果跨越多个主版本号,如5.5升级到5.7,建议先5.5升级5.6,再5.6升级5.7

        • 升级5.5到5.6

        • 启动新的数据库

        • 运行mysql_upgrade

        • 升级5.6到5.7

        • 启动新的数据库

        • 运行mysql_upgrade

      • 降级

        • 在安装目录中找到mysql_system_tables_fix_for_downgrade.sql文件

        • mysql < mysql_system_tables_fix_for_downgrade.sql

        • 备份所有表 mysqldump --all-databases > dump.sql

        • 停止mysql数据库,启动老版本的数据库

        • mysql < dump.sql

        • 重启老板数据库

        • 由于不同的版本数据库引擎可能不同,需要将新版本中表的数据库引擎改成老版本的数据库引擎,如 alter table tab_name ENGINE=MyISAMA STATS_PRESISTENT=DEFAULT

    • 拷贝数据库到另外一台主机

      • mysqladmin -h 'other_hostname' create db_name

      • mysqldump db_name | mysql -h 'other_hostname' db_name

    • 从远程主机拷贝数据

      • mysqladmin create db_name

      • mysqldump -h 'other_hostname' --compress db_name | mysql db_name

  • 安全

    • 安全向导

      • 使用mysql -u root 测试连接root用户是否需要输入密码

      • 使用show grants查看用户的访问权限

      • 不要存明文密码,可以使用SHA2,SHA1,MD5转化后存

    • 保持密码安全

      • 终端用户的密码安全

        • 使用mysql登录选项p时,不要直接指定密码

        • 将密码存在配置文件中,[client] 节点下的password=yourpassword,然后保证利用系统的权限机制保证该配置文件的访问权限

        • 使用mysql_config_editor保存密码,会生成.mylogin.cnf文件,mysql会读取该文件

          • mysql_config_editor set --user=root --socket=/var/run/mysql/mysql.sock --password

          • mysql_config_editor set --user=root --host=127.0.0.1 --port=3306 --socket=/var/run/mysql/mysql.sock --password

      • 管理员的密码安全

        • mysql密码存放在mysql.user表中,非管理员用户不应该具有访问该表的权限

      • 密码和日志

        • 直接使用insert,update操作mysql.user表中的密码字段,可能会被明文写到日志里面去

        • create user , grant,set password,密码字段在日志会被隐藏

    • 使得mysql防御攻击

      • 确保每个用户都有密码

      • 确保只有运行mysqld的用户具有对数据库数据目录的读写权限

      • 绝不要用root用户运行mysql服务器

      • 不要授权file,process,super权限给非管理员用户

    • mysql权限访问系统

      • mysql提供的权限

        • 权限分类

          • 管理员权限

          • 数据库权限

          • 数据库对象权限(表,索引等)

        • 权限名

          • CREATE                             databases, tables, or indexs

          • DROP                                databases, tables, or indexs

          • GRANT_OPTION               databases, tables, or stored routines, 允许你授权的权限

          • LOCK_TABLES                   databases

          • REFERENCES                     databases or tables

          • EVENT                               databases or tables

          • ALTER                                tables

          • DELETE                              tables

          • INDEX                                tables

          • INSERT                               tables or columns

          • SELECT                               tables or columns

          • UPDATE                             tables or columns

          • CREATE TEMPORARY TABLES             tables

          • TRIGGER                            tables

          • CREATE VIEW                    views

          • SHOW VIEW                      views

          • ALTER ROUTINE                stored routines

          • CREATE ROUTINE              stored routines

          • EXECUTE                            stored routines

          • FILE                                    file accesss on server host

          • CREATE  TABLESPACE      server administration

          • CREATE USER                    server administration

          • PROCESS                           server administration

          • PROXY                               server administration

          • RELOAD                            server administration

          • REPLICATION CLIENT       server administration, 运行用户使用show master status,show slave status 和show binary logs

          • REPLICATION SLAVE        server administration

          • SHOW DATABASES          server administration

          • SHUTDOWN                     server administration

          • SUPER                               server administration

          • ALL                                    server administration          代表所有权限除了GRANT_OPTION

          • USAGE                               server administration

    • 用户账户管理

      • 添加用户

        • CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';

        • GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'

      • 删除用户

        • DROP USER 'jeffrey'@'localhost';

      • 用户密码修改

        • ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';  5.7.6 以及以后版本修改指定用户密码

        • ALTER USER USER() IDENTIFIED BY 'mypass'                         5.76 以及以后版本修改当前连接用户密码  

        • SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('mypass');        5.7.6 之前版本修改指定用户密码

        • GRANT USAGE ON *.* TO 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';  5.7.6 之前版本修改指定用户密码

        • SET PASSWORD = PASSWORD('mypass');                                                  5.76 以及以后版本修改当前连接用户密码

      • 密码过期代理

        • 修改密码为过期

          • ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;

        • 配置全局的密码过期时间【5.7.6以后支持】

          • [mysqld]

          • default_password_lifetime=180                             #天

          • SET GLOBAL default_password_lifetime = 180;

        • 针对某个用户配置

          • ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY; 

          • ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER;      取消密码失效

      • 插件的安装

        • 服务器端

          • 配置文件my.cnf的mysqld节点添加plugin-load=test_plugin_server=auth_test_plugin.so其中test_plugin_server是插件名,auth_test_plugin.so是插件所在的so

          • 或者

          • mysql> INSTALL PLUGIN test_plugin_server SONAME 'auth_test_plugin.so';

        • 客户端

          • --default-auth=plugin_name选项使得mysql client使用新的插件连接服务器

      • 代理用户

        • 当客户端用代理用户连接到mysql服务器,插件必须返回被代理的用户名

        • 代理用户必须安装认证插件

        • 代理用户必须具有proxy权限 

        • eg

          • CREATE USER 'empl_external'@'localhost' IDENTIFIED WITH auth_plugin AS 'auth_string';

          • CREATE USER 'employee'@'localhost' IDENTIFIED BY 'employee_pass';

          • GRANT PROXY ON 'employee'@'localhost' TO 'empl_external'@'localhost';

  • 启停

    • 启动

      • mysqld

      • mysqld_safe

      • mysqld.server

      • mysqld_mutil

        • mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]

        • 配置文件的例子

          • # This file should probably be in your home dir (~/.my.cnf)

          • # or /etc/my.cnf

          • # Version 2.1 by Jani Tolonen

          • [mysqld_multi]

          • mysqld     = /usr/local/bin/mysqld_safe

          • mysqladmin = /usr/local/bin/mysqladmin

          • user       = multi_admin

          • password   = multipass

          • [mysqld2]

          • socket     = /tmp/mysql.sock2

          • port       = 3307

          • pid-file   = /usr/local/mysql/var2/hostname.pid2

          • datadir    = /usr/local/mysql/var2

          • language   = /usr/local/share/mysql/english

          • user       = john

          • [mysqld3]

          • socket     = /tmp/mysql.sock3

          • port       = 3308

          • pid-file   = /usr/local/mysql/var3/hostname.pid3

          • datadir    = /usr/local/mysql/var3

          • language   = /usr/local/share/mysql/swedish

          • user       = monty

          • [mysqld4]

          • socket     = /tmp/mysql.sock4

          • port       = 3309

          • pid-file   = /usr/local/mysql/var4/hostname.pid4

          • datadir    = /usr/local/mysql/var4

          • language   = /usr/local/share/mysql/estonia

          • user       = tonu

          • [mysqld6]

          • socket     = /tmp/mysql.sock6

          • port       = 3311

          • pid-file   = /usr/local/mysql/var6/hostname.pid6

          • datadir    = /usr/local/mysql/var6

          • language   = /usr/local/share/mysql/japanese

          • user       = jani

    • 停止

      • mysqladmin shutdown

  • 备份和恢复

    • 备份和恢复

      • 备份的类型

        • 物理备份和逻辑备份

          • 物理备份适用于大的数据,需要快速恢复

          • 逻辑备份适用于小的数据,可以在不同的机器间恢复

        • 在线备份和离线备份

        • 本地备份和远程备份

        • 快照备份

        • 全量备份和增量备份

      • 备份的方法

        • mysqldump

          • 对于innodb数据库,使用--single-transaction可以实现online备份

        • 直接copy数据库文件

        • 分隔符文件备份

          • SELECT * INTO OUTFILE      'file_name' FROM      tbl_name

        • 利用二进制日志增量备份

          • 当服务使用--log-bin之后,可以使用增量备份

      • 备份和恢复的列子

        • 备份

          • 全量备份

            • mysqldump --single-transaction --all-databases > backup_sunday_1_PM.sql

          • 增量备份

            • flush logs后拷贝二进制日志

        • 恢复

          • 使用全量备份文件恢复

            • mysql < back_sunday_1_PM.sql

          • 使用增量备份文件恢复

            • mysqlbinlog  mysql-bin.xxxxx | mysql

        • 使用mysqldump产生分隔符备份文件

          • mysqldump --tab=/tmp --fields-terminated-by=, --fields-enclosed-by='"' --lines-terminated-by=0x0d0a db1

        • 使用分隔符文件恢复

          • USE db1;

          • LOAD DATA INFILE 't1.txt' INTO TABLE t1 FIELDS TERMINATED BY ',' FIELDS ENCLOSED BY '"' LINES TERMINATED BY '\r\n'

          • 或者

          • mysqlimport --fields-terminated-by=, fields-enclosed-by='"' --lines-terminated-by=0x0d0a db1 t1.txt

    • 使用复制(replication )来备份

      • 使用mysqldump备份从服务器

        • 1)mysqladmin stop-slave 或者 mysql -e 'STOP SLAVE SQL_THREAD;'

        • 2)mysqldump --all-databases > fulldb.dump

        • 3)mysqladmin start-slave

      • 从从服务器备份原始数据

        • 1)mysqladmin shutdown

        • 2)tar cf /tmp/dbbackup.tar ./data

        • 3)mysqld_safe &

    • innodb的备份和恢复

      • 热备份

        • 使用mysqlbackup

      • 冷备份

        • 1)slow shutdown

        • 2)复制innodb的数据文件(ibdata 文件和 .idb文件)

        • 3)复制.frm文件

        • 4)复制my.cnf配置文件

转载于:https://my.oschina.net/465759695/blog/498949

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值