安装与升级
二进制包安装
依赖
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