文章目录

  • 一、mysql安装部署
  • (一)rpm包形式
  • (二)源码编译
  • (三)通用二进制形式
  • 二、MySQL 之自带工具
  • (一)mysql
  • (二)mysqladmin
  • (三)mysqlshow
  • (四)mysqldump


一、mysql安装部署

(一)rpm包形式

优点:安装简单,不需要过多的安装配置,适合初学者安装使用

缺点:需要下载客户端和服务器端,当然现在都是可以捆绑下载了,安装路径为默认安装路径不能修改,一台服务器只能安装一个MySQL,不能安装多个虚拟主机。

方法一:mysql官方yum源方式安装

rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
rpm -ivh  https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
yum clean all
yum makecache
yum install mysql-community-server -y # 时间会比较长

方法二:下载rpm包安装

在mysql官网上下载对应版本的rpm包上传到本地

https://dev.mysql.com/downloads/mysql/

卸载mariadb

rpm -qa | grep mariadb
rpm -e mariadb-libs --nodeps

解压

mkdir /usr/local/mysql
tar -xvf mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar -C /usr/local/mysql/ && rm -rf mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar

安装

cd /usr/local/mysql
yum localinstall * -y && rm -rf *

初始化和配置

mysqld --initialize
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld

查看数据库密码

sed -n '/password/ p' /var/log/mysqld.log

登录

mysql -p'上步查询出来的密码'

修改密码

mysql> alter user 'root'@'localhost' identified by '修改后的密码';
mysql> flush privileges;

该方法安装时,虽然安装包已经下载到了本地,但是在安装的过程中任然可能存在依赖,因此需要配置好网络源。

(二)源码编译

优点:可按需定制编译,最灵活;性能最好;一台服务器可以安装多个MySQL

缺点:安装过程复杂;编译时间长;不适合初学者

(三)通用二进制形式

优点:安装简单,可以安装到任何路径下,灵活性好;一台服务器可以安装多个mysql

缺点:已经经过编译,性能不如源码编译得好,不能灵活定制编译参数

下载并上传到本地

https://dev.mysql.com/downloads/mysql/

安装依赖:

[root@test ~]# yum -y install make gcc-c++ cmake bison-devel ncurses-devel

修改系统限制参数

[root@test ~]# cat >> /etc/security/limits.conf <<EOF
* soft  nofile    20480
* hard  nofile    65535
* soft  nproc    20480
* hard  nproc    65535
EOF

修改内核参数

[root@test ~]# cat >>/etc/sysctl.conf <<"EOF"
vm.swappiness=0
#增加tcp支持的队列数
net.ipv4.tcp_max_syn_backlog = 65535
#减少断开连接时,资源回收
net.ipv4.tcp_max_tw_buckets = 8000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10
#改变本地的端口范围
net.ipv4.ip_local_port_range = 1024 65535
#允许更多的连接进入队列
net.ipv4.tcp_max_syn_backlog = 4096 
#对于只在本地使用的数据库服务器
net.ipv4.tcp_fin_timeout = 30
#端口监听队列
net.core.somaxconn=65535
#接受数据的速率
net.core.netdev_max_backlog=65535
net.core.wmem_default=87380
net.core.wmem_max=16777216
net.core.rmem_default=87380
net.core.rmem_max=16777216
EOF
[root@test ~]# sysctl -p

mysql的安装配置

解压安装包

[root@test ~]# tar xJf mysql-8.0.15-linux-glibc2.12-x86_64.tar.xz -C /opt/

软连接到/usr/local/下

[root@test local]# ln -s /opt/mysql-8.0.15-linux-glibc2.12-x86_64 mysql

创建用户

[root@test local]# groupadd mysql
[root@test local]# useradd -g mysql mysql -d /home/mysql -s /sbin/nologin

修改目录权限

[root@test local]# chown -R mysql:mysql mysql/*

初始化数据库

[root@test local]# cd mysql/
[root@test mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
2021-02-12T01:54:21.574303Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2021-02-12T01:54:21.574514Z 0 [System] [MY-013169] [Server] /opt/mysql-8.0.15-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.15) initializing of server in progress as process 1306
2021-02-12T01:54:57.854262Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: z&TgwKd6o%z?    # 此密码为登录mysql的临时密码,要复制下来
2021-02-12T01:55:04.038698Z 0 [System] [MY-013170] [Server] /opt/mysql-8.0.15-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.15) initializing of server has completed

备份配置文件

[root@test mysql]# mv /etc/my.cnf /etc/my.cnf.`date +%Y%m%d%H%M`

修改配置文件

[root@test mysql]# vim /etc/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
server_id=10
port = 3306
user = mysql
character-set-server = utf8
default_storage_engine = innodb
log_timestamps = SYSTEM
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
pid-file = /usr/local/mysql/data/mysqld.pid
max_connections = 1000
max_connect_errors = 1000
table_open_cache = 1024
max_allowed_packet = 128M
open_files_limit = 65535
#[innodb]
innodb_buffer_pool_size = 1024M
innodb_file_per_table = 1
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_purge_threads = 2
innodb_flush_log_at_trx_commit = 1
innodb_log_file_size = 512M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 16M
innodb_max_dirty_pages_pct = 80
innodb_lock_wait_timeout = 30
innodb_data_file_path=ibdata1:10M:autoextend
#[log]
log_error = /var/log/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /var/log/mysql-slow.log
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

为mysql提供sysv服务脚本

[root@test init.d]# cd /usr/local/mysql
[root@test mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@test mysql]# chmod +x /etc/rc.d/init.d/mysqld

启动mysql

[root@test mysql]# chkconfig --add mysqld	# 添加为系统服务
# chkconfig mysqld on 开机自启动
[root@test mysql]# systemctl start mysqld

将mysql的bin目录加入PATH环境变量

[root@test mysql]# vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
[root@test mysql]# source /etc/profile.d/mysql.sh

数据库登录并修改密码

[root@test ~]# mysql -uroot -p
Enter password: 			#输入刚才的数据库临时密码
mysql> alter user 'root'@'localhost' identified by 'xxxxxxxx';   #修改密码(有一定的复杂性要求)

二、MySQL 之自带工具

在MySQL中,自带了许多功能比较强大的工具,如mysql、mysqladmin、mysqldump等

(一)mysql

Mysql命令是用的最多的一个命令工具了,为用户提供一个命令行接口来操作管理MySQL 服务器。可以通过mysql --help来查看其详细使用方法。

常用选项:

mysql命令选项

作用

说明

-u

指定连接数据库时使用的用户

-p

指定用户的密码

可以-p后面直接写密码,也可以不写,进行交互式输入密码,推荐后者

-h

指定要登录的主机

可选,如果为空,则登录本机

-P

指定要连接的端口

可选,默认是3306

-e

可以通过-e命令直接执行SQL语句,而不用进入数据库

免交互登录数据库执行SQL语句,通常在脚本中使用

-D

指定要登录到哪个库

默认不会登录到库,可以省略此选项,直接写库名

-E

查询到的结果以行来显示

类似于每条SQL语句后面加“\G”

-f

即使出现SQL错误,也强制继续

比如在不登陆数据库执行删除库的操作会有一个交互式的确认操作,可以使用此选项来避免交互式

-X

将查询到的数据导出位xml文件

导出的文件在windows系统中可以使用excel表格打开

-H

将查询到的数据导出位html文件

导出的文件在windows系统中可以使用浏览器打开

--prompt

定制自己的MySQL提示符显示的内容

默认登登录到MySQL后的提示符是“mysql >”,可以使用该选项定制提示符

--tee

将操作数据库所有输入和输出的内容都记录进文件中

在一些较大维护变更的时候,为了方便被查,可以将整个操作过程中的输出信息保存到某个文件中

【例 】

远程登录

mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

默认都是localhost,即只能本地登录

修改为允许任意客户端以root身份远程登录到该mysql服务器

mysql> update user set host = '%' where user = 'root';
mysql> flush privileges;
Query OK, 0 rows affected (0.17 sec)
mysql> \q
Bye
[root@test ~]# systemctl restart mysqld
[root@test ~]# systemctl stop firewalld

从另一台设备便可以远程登录到 mysql 服务器

[root@server ~]# mysql -uroot -pABC123.com -h 192.168.126.11 -P3306  -D mysql -e "show tables;";
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| component                 |
| db                        |
| default_roles             |
| engine_cost               |
| func                      |
| general_log               |
| global_grants             |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| password_history          |
| plugin                    |
| procs_priv                |
| proxies_priv              |
| role_edges                |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

# -uroot:使用root用户
# -pABC123.com:密码是ABC123.com
# -h:登录的主机地址是192.168.126.11
# -P:登录的端口是3306
# -D:登录到库名为mysql的库中
# -e:后面是SQL语句
# 即:使用密码为ABC123.com的root用户,通过3306端口连接192.168.126.11的mysql库,查询mysql库中有哪些表

--prompt使用方法

[root@test ~]# mysql -uroot -pABC123.com --prompt="\\u@\\h: \\d \\r:\\m:\\s> "

#上述参数解:\u 表示用户名,  \h 表示主机名, \d 表示当前数据库(none表示没有在任何库中);
# \R小时  24小时制 \r小时(12小时制),\m分种,\s秒,\R小时  24小时制

上述方式每次连接都要写那些字符进行定制,非常麻烦,可以将其写入配置文件中的clinet字段下,之后再登录就可以省略了,如下:

[client]      #注意写在client字段
prompt="\\u@\\h: \\d \\R:\\m:\\s> "         #写入该行
[mysqld]
             ..........#省略部分内容
#要记得重启服务

之后再次连接就不用再指定了

--tee使用方法

mysql -uroot -p123 --tee=/path/filename

将屏幕打印的所有信息包括错误信息写入到filename文件中;从文件中看出,记录的是连接到数据库后,用户进行的所有操作命令及输出信息。

同样,“–tee”这个配置项也可以写入my.cnf这个主配置文件中的client字段下,如下:

[client]                    ...........省略部分内容
tee=/path/filename

-H选项的使用方式

[root@test ~]# mysql -H -uroot -pABC123.com -e "select * from mysql.user" > a.html
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@test ~]# sz a.html

用浏览器打开下载的文件显示如下:

mysql的erp是什么意思 mysql rpm_数据库


-X的选项使用方式同样

(二)mysqladmin

mysqadmin,顾名思义,提供的功能都是与MySQL 管理相关的各种功能。如MySQL Server状态检查,各种统计信息的flush,创建/删除数据库,关闭MySQL Server 等等。mysqladmin所能做的事情,虽然大部分都可以通过mysql连接登录上MySQL Server 之后来完成,但是大部分通过mysqladmin来完成操作会更简单更方便。

mysqladmin是一个执行管理操作的客户程序,mysqladmin后面可以接选项,也可以接命令

用法:

mysqladmin [options] command [command-options] [command [command-options]] ...

mysqladmin支持下面的选项:

  • --help,-?
    显示帮助消息并退出。
  • --character-sets-dir=path
    字符集的安装目录。参见5.10.1节,“数据和排序用字符集”。
  • --compress,-C
    压缩客户和服务器之间发送的所有信息(如果二者均支持压缩)。
  • --count=num,-c num
    迭代数目。该选项只有结合–sleep (-i)才能工作。
  • --default-character-set=charset
    使用charsetas作为默认字符集。参见5.10.1节,“数据和排序用字符集”。
  • --force,-f
    不再为drop database命令进行确认。对于多个命令,即使出现错误也继续。
  • --host=host_name,-h host_name
    连接给定主机上的MySQL服务器。
  • --password[=password],-p[password]
    连接服务器使用的密码。如果使用短选项形式(-p),该选项和 密码之间不能有空格。如果你在命令行中在–password或-p选项后面省略 密码值,将提示你输入密码。
  • --port=port_num,-P port_num
    用于连接的TCP/IP端口号。
  • --protocol={TCP | SOCKET | PIPE | MEMORY}
    使用的连接协议。
  • --relative,-r
    当带-I使用时显示当前和前面值的差别。目前,该选项只用于extended-status命令。
  • --silent,-s
    如果不能建立与服务器的连接则以沉默方式退出。
  • --sleep=delay,-i delay
    每睡眠delay秒后执行一次命令。
  • --socket=path,-S path
    用于连接的套接字文件。
  • --user=user_name,-u user_name
    当连接服务器时使用的MySQL用户名。
  • --verbose,-v
    冗长模式。打印出程序操作的详细信息。
  • --version,-V
    显示版本信息并退出。
  • --vertical,-E
    垂直打印输出。类似于–relative,但垂直打印输出。
  • --wait[=count],-w[count]
    如果连接不能建立,等待并重试而不是放弃。如果给出一个选项值,则指示重试的次数。默认是一次。
    也可以使用–var_name=value选项设置下面的变量:
    connect_timeout
    连接超时之前的最大秒数。默认值为43200(12小时)。
    shutdown_timeout
    等候关闭的最大秒数。默认值为3600(1小时)。

mysqladmin支持下面的sql命令:

create db_name	创建一个名为db_name的新数据库。

debug	告诉服务器向错误日志写入调试信息。

drop db_name	删除名为db_nam的数据库和所有表。

extended-status		显示服务器状态变量及其值。

flush-hosts		刷新主机缓存中的所有信息。

flush-logs		刷新所有日志(会生成新的二进制日志文件)。

flush-privileges	重载授权表(类似reload)。

flush-status	清除状态变量。

flush-tables	刷新所有表。

flush-threads	刷新线程缓存。

kill id,id,...	杀掉服务器线程。

old-password new-password		类似password但使用旧的(pre-4.1)密码哈希格式保存 密码。(参见5.7.9节,“MySQL 4.1中的密码哈希处理”)。

password new-password	设置一个新密码。将用mysqladmin连接服务器使用的 账户的密码更改为new-password。
如果new-password包含空格或其它命令解释符的特殊字符,需要用引号将它引起来。在Windows中,一定要使用双引号而不要用单引号;单引号不会从 密码中剥离出来,而是解释为密码的一部分。例如:
检查服务器是否仍活动。如果服务器在运行mysqladmin返回状态0,如果不运行返回1。即使出现错误例如Access denied也为0,因为这说明服务器在运行但拒绝了连接,与服务器不在运行不同。

processlist		显示活动服务器线程的列表。类似SHOW PROCESSLIST语句的输出。如果给出了--verbose选项,输出类似SHOW FULL PROCESSLIST

reload		重载授权表。

refresh		刷新所有表并关闭和打开日志文件。

shutdown	停止服务器。

start-slave		开始从服务器上的复制(开启主从复制)。

status	显示短服务器状态消息。

stop-slave	停止从服务器上的复制(关闭主从复制)。

ping	检测某个MySQL服务是否处于启动状态

variables	显示服务器系统变量及其值。

version		显示服务器的版本信息。

status命令字的使用

[root@test ~]# mysqladmin -uroot -pABCD123.com status
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Uptime: 13041  Threads: 2  Questions: 98  Slow queries: 0  Opens: 234  Flush tables: 2  Open tables: 210  Queries per second avg: 0.007

检测某个MySQL服务是否处于启动状态

# 服务启动状态下执行 ping 命令:
[root@server ~]# mysqladmin -uroot -pABCD123.com -h 192.168.126.11 ping
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqld is alive
# 服务停止状态下执行 ping 命令:
[root@server ~]# mysqladmin -uroot -pABCD123.com -h 192.168.126.11 ping
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqladmin: connect to server at '192.168.126.11' failed
error: 'Can't connect to MySQL server on '192.168.126.11' (111)'
Check that mysqld is running on 192.168.126.11 and that the port is 3306.
You can check this by doing 'telnet 192.168.126.11 3306'

显示服务器的所有运行进程 processlist

[root@test ~]# mysqladmin -uroot -pABCD123.com processlist
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
+----+-----------------+-----------+----+---------+------+------------------------+------------------+
| Id | User            | Host      | db | Command | Time | State                  | Info             |
+----+-----------------+-----------+----+---------+------+------------------------+------------------+
| 4  | event_scheduler | localhost |    | Daemon  | 51   | Waiting on empty queue |                  |
| 8  | root            | localhost |    | Query   | 0    | starting               | show processlist |
+----+-----------------+-----------+----+---------+------+------------------------+------------------+

修改用户密码

[root@test ~]# mysqladmin -uroot -pABCD123.com password 'abc123.COM'
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

(三)mysqlshow

mysqlshow命令用于显示mysql服务器中数据库、表和列表信息。

选项:

  • -h:MySQL服务器的ip地址或主机名;
  • -u:连接MySQL服务器的用户名;
  • -p:连接MySQL服务器的密码;
  • --count:显示每个数据表中数据的行数;
  • -k:显示数据表的索引;
  • -t:显示数据表的类型;
  • -i:显示数据表的额外信息。

显示系统的所有数据库

[root@test ~]# mysqlshow -uroot -pabc123.COM

显示数据库中指定库的所有表并统计表的列数

[root@test ~]# mysqlshow -uroot -pabc123.COM mysql -v

# 显示列数的同时显示行数
[root@test ~]# mysqlshow -uroot -pabc123.COM mysql -v -v

查看test数据库所有索引信息

mysqlshow -k test -u root -p

查看test数据库表额外信息

mysqlshow -i test -u root -p

查看test数据库的student表额外信息

mysqlshow -u root -p -i test student

(四)mysqldump

mysqldump 是 MySQL 自带的逻辑备份工具。

它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。

用法:

Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

选项:

--host,	-h		服务器IP地址
--port,	-P		服务器端口号
--user,	-u		MySQL 用户名
--pasword,	-p		MySQL 密码

--all-databases  , -A
导出全部数据库。
mysqldump  -uroot -p --all-databases

--all-tablespaces  , -Y
导出全部表空间。
mysqldump  -uroot -p --all-databases --all-tablespaces

--no-tablespaces  , -y
不导出任何表空间信息。
mysqldump  -uroot -p --all-databases --no-tablespaces

--add-drop-database
每个数据库创建之前添加drop数据库语句。
mysqldump  -uroot -p --all-databases --add-drop-database

--add-drop-table
每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)
mysqldump  -uroot -p --all-databases  (默认添加drop语句)
mysqldump  -uroot -p --all-databases –skip-add-drop-table  (取消drop语句)

--add-locks
在每个表导出之前增加LOCK TABLES并且之后UNLOCK  TABLE。(默认为打开状态,使用--skip-add-locks取消选项)
mysqldump  -uroot -p --all-databases  (默认添加LOCK语句)
mysqldump  -uroot -p --all-databases –skip-add-locks   (取消LOCK语句)

--allow-keywords
允许创建是关键词的列名字。这由表名前缀于每个列名做到。
mysqldump  -uroot -p --all-databases --allow-keywords

--apply-slave-statements
在'CHANGE MASTER'前添加'STOP SLAVE',并且在导出的最后添加'START SLAVE'。
mysqldump  -uroot -p --all-databases --apply-slave-statements

--character-sets-dir
字符集文件的目录
mysqldump  -uroot -p --all-databases  --character-sets-dir=/usr/local/mysql/share/mysql/charsets

--comments
附加注释信息。默认为打开,可以用--skip-comments取消
mysqldump  -uroot -p --all-databases  (默认记录注释)
mysqldump  -uroot -p --all-databases --skip-comments   (取消注释)

--compatible
导出的数据将和其它数据库或旧版本的MySQL 相兼容。值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,
要使用几个值,用逗号将它们隔开。它并不保证能完全兼容,而是尽量兼容。
mysqldump  -uroot -p --all-databases --compatible=ansi

--compact
导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:--skip-add-drop-table  --skip-add-locks --skip-comments --skip-disable-keys
mysqldump  -uroot -p --all-databases --compact

--complete-insert,  -c
使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。
mysqldump  -uroot -p --all-databases --complete-insert

--compress, -C
在客户端和服务器之间启用压缩传递所有信息
mysqldump  -uroot -p --all-databases --compress

--create-options,  -a
在CREATE TABLE语句中包括所有MySQL特性选项。(默认为打开状态)
mysqldump  -uroot -p --all-databases

--databases,  -B
导出几个数据库。参数后面所有名字参量都被看作数据库名。
mysqldump  -uroot -p --databases test mysql

--debug
输出debug信息,用于调试。默认值为:d:t,/tmp/mysqldump.trace
mysqldump  -uroot -p --all-databases --debug
mysqldump  -uroot -p --all-databases --debug=” d:t,/tmp/debug.trace”

--debug-check
检查内存和打开文件使用说明并退出。
mysqldump  -uroot -p --all-databases --debug-check

--debug-info
输出调试信息并退出
mysqldump  -uroot -p --all-databases --debug-info

--default-character-set
设置默认字符集,默认值为utf8
mysqldump  -uroot -p --all-databases --default-character-set=utf8

--delayed-insert
采用延时插入方式(INSERT DELAYED)导出数据
mysqldump  -uroot -p --all-databases --delayed-insert

--delete-master-logs
master备份后删除日志. 这个参数将自动激活--master-data。
mysqldump  -uroot -p --all-databases --delete-master-logs

--disable-keys
对于每个表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句。这样可以更快地导入dump出来的文件,因为它是在插入所有行后创建索引的。该选项只适合MyISAM表,默认为打开状态。
mysqldump  -uroot -p --all-databases 

--dump-slave
该选项将主的binlog位置和文件名追加到导出数据的文件中(show slave status)。设置为1时,将会以CHANGE MASTER命令输出到数据文件;设置为2时,会在change前加上注释。该选项将会打开--lock-all-tables,除非--single-transaction被指定。该选项会自动关闭--lock-tables选项。默认值为0。
mysqldump  -uroot -p --all-databases --dump-slave=1
mysqldump  -uroot -p --all-databases --dump-slave=2

--master-data
该选项将当前服务器的binlog的位置和文件名追加到输出文件中(show master status)。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE  MASTER命令前添加注释信息。该选项将打开--lock-all-tables 选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--single-transaction选项)。该选项自动关闭--lock-tables选项。
mysqldump  -uroot -p --host=localhost --all-databases --master-data=1;
mysqldump  -uroot -p --host=localhost --all-databases --master-data=2;

--events, -E
导出事件。
mysqldump  -uroot -p --all-databases --events

--extended-insert,  -e
使用具有多个VALUES列的INSERT语法。这样使导出文件更小,并加速导入时的速度。默认为打开状态,使用--skip-extended-insert取消选项。
mysqldump  -uroot -p --all-databases
mysqldump  -uroot -p --all-databases--skip-extended-insert   (取消选项)

--fields-terminated-by
导出文件中忽略给定字段。与--tab选项一起使用,不能用于--databases和--all-databases选项
mysqldump  -uroot -p test test --tab=”/home/mysql” --fields-terminated-by=”#”

--fields-enclosed-by
输出文件中的各个字段用给定字符包裹。与--tab选项一起使用,不能用于--databases和--all-databases选项
mysqldump  -uroot -p test test --tab=”/home/mysql” --fields-enclosed-by=”#”

--fields-optionally-enclosed-by
输出文件中的各个字段用给定字符选择性包裹。与--tab选项一起使用,不能用于--databases和--all-databases选项
mysqldump  -uroot -p test test --tab=”/home/mysql”  --fields-enclosed-by=”#” --fields-optionally-enclosed-by  =”#”

--fields-escaped-by
输出文件中的各个字段忽略给定字符。与--tab选项一起使用,不能用于--databases和--all-databases选项
mysqldump  -uroot -p mysql user --tab=”/home/mysql” --fields-escaped-by=”#”

--flush-logs,-F
开始导出之前刷新日志。
请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。除使用--lock-all-tables或者--master-data外。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--master-data 和--flush-logs。
mysqldump  -uroot -p --all-databases --flush-logs

--flush-privileges
在导出mysql数据库之后,发出一条FLUSH  PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql数据库数据的任何时候。
mysqldump  -uroot -p --all-databases --flush-privileges

--force
在导出过程中忽略出现的SQL错误。
mysqldump  -uroot -p --all-databases --force

--help
显示帮助信息并退出。
mysqldump  --help

--hex-blob
使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用该选项。影响到的字段类型有BINARY、VARBINARY、BLOB。
mysqldump  -uroot -p --all-databases --hex-blob

--host, -h
需要导出的主机信息
mysqldump  -uroot -p --host=localhost --all-databases

--ignore-table
不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……
mysqldump  -uroot -p --host=localhost --all-databases --ignore-table=mysql.user

--include-master-host-port
在--dump-slave产生的'CHANGE  MASTER TO..'语句中增加'MASTER_HOST=<host>,MASTER_PORT=<port>'  
mysqldump  -uroot -p --host=localhost --all-databases --include-master-host-port

--insert-ignore
在插入行时使用INSERT IGNORE语句.
mysqldump  -uroot -p --host=localhost --all-databases --insert-ignore

--lines-terminated-by
输出文件的每行用给定字符串划分。与--tab选项一起使用,不能用于--databases和--all-databases选项。
mysqldump  -uroot -p --host=localhost test test --tab=”/tmp/mysql”  --lines-terminated-by=”##”

--lock-all-tables,  -x
提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭--single-transaction 和--lock-tables 选项。
mysqldump  -uroot -p --host=localhost --all-databases --lock-all-tables

--lock-tables,  -l
开始导出前,锁定所有表。用READ  LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。
请注意当导出多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出文件中的表在数据库之间的逻辑一致性。不同数据库表的导出状态可以完全不同。
mysqldump  -uroot -p --host=localhost --all-databases --lock-tables

--log-error
附加警告和错误信息到给定文件
mysqldump  -uroot -p --host=localhost --all-databases  --log-error=/tmp/mysqldump_error_log.err

--max_allowed_packet
服务器发送和接受的最大包长度。
mysqldump  -uroot -p --host=localhost --all-databases --max_allowed_packet=10240

--net_buffer_length
TCP/IP和socket连接的缓存大小。
mysqldump  -uroot -p --host=localhost --all-databases --net_buffer_length=1024

--no-autocommit
使用autocommit/commit 语句包裹表。
mysqldump  -uroot -p --host=localhost --all-databases --no-autocommit

--no-create-db,  -n
只导出数据,而不添加CREATE DATABASE 语句。
mysqldump  -uroot -p --host=localhost --all-databases --no-create-db

--no-create-info,  -t
只导出数据,而不添加CREATE TABLE 语句。
mysqldump  -uroot -p --host=localhost --all-databases --no-create-info

--no-data, -d
不导出任何数据,只导出数据库表结构。
mysqldump  -uroot -p --host=localhost --all-databases --no-data

--no-set-names,  -N
等同于--skip-set-charset
mysqldump  -uroot -p --host=localhost --all-databases --no-set-names

--opt
等同于--add-drop-table,  --add-locks, --create-options, --quick, --extended-insert, --lock-tables,  --set-charset, --disable-keys 该选项默认开启,  可以用--skip-opt禁用.
mysqldump  -uroot -p --host=localhost --all-databases --opt

--order-by-primary
如果存在主键,或者第一个唯一键,对每个表的记录进行排序。在导出MyISAM表到InnoDB表时有效,但会使得导出工作花费很长时间。 
mysqldump  -uroot -p --host=localhost --all-databases --order-by-primary

--password, -p
连接数据库密码

--pipe(windows系统可用)
使用命名管道连接mysql
mysqldump  -uroot -p --host=localhost --all-databases --pipe

--port, -P
连接数据库端口号

--protocol
使用的连接协议,包括:tcp, socket, pipe, memory.
mysqldump  -uroot -p --host=localhost --all-databases --protocol=tcp

--quick, -q
不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。
mysqldump  -uroot -p --host=localhost --all-databases 
mysqldump  -uroot -p --host=localhost --all-databases --skip-quick

--quote-names,-Q
使用(`)引起表和列名。默认为打开状态,使用--skip-quote-names取消该选项。
mysqldump  -uroot -p --host=localhost --all-databases
mysqldump  -uroot -p --host=localhost --all-databases --skip-quote-names

--replace
使用REPLACE INTO 取代INSERT INTO.
mysqldump  -uroot -p --host=localhost --all-databases --replace

--result-file,  -r
直接输出到指定文件中。该选项应该用在使用回车换行对(\\r\\n)换行的系统上(例如:DOS,Windows)。该选项确保只有一行被使用。
mysqldump  -uroot -p --host=localhost --all-databases --result-file=/tmp/mysqldump_result_file.txt

--routines, -R
导出存储过程以及自定义函数。
mysqldump  -uroot -p --host=localhost --all-databases --routines

--set-charset
添加'SET NAMES  default_character_set'到输出文件。默认为打开状态,使用--skip-set-charset关闭选项。
mysqldump  -uroot -p --host=localhost --all-databases 
mysqldump  -uroot -p --host=localhost --all-databases --skip-set-charset

--single-transaction
该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK  TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。
mysqldump  -uroot -p --host=localhost --all-databases --single-transaction

--dump-date
将导出时间添加到输出文件中。默认为打开状态,使用--skip-dump-date关闭选项。
mysqldump  -uroot -p --host=localhost --all-databases
mysqldump  -uroot -p --host=localhost --all-databases --skip-dump-date

--skip-opt
禁用–opt选项.
mysqldump  -uroot -p --host=localhost --all-databases --skip-opt

--socket,-S
指定连接mysql的socket文件位置,默认路径/tmp/mysql.sock
mysqldump  -uroot -p --host=localhost --all-databases --socket=/tmp/mysqld.sock

--tab,-T
为每个表在给定路径创建tab分割的文本文件。注意:仅仅用于mysqldump和mysqld服务器运行在相同机器上。注意使用--tab不能指定--databases参数
mysqldump  -uroot -p --host=localhost test test --tab="/home/mysql"

--tables
覆盖--databases (-B)参数,指定需要导出的表名,在后面的版本会使用table取代tables。
mysqldump  -uroot -p --host=localhost --databases test --tables test

--triggers
导出触发器。该选项默认启用,用--skip-triggers禁用它。
mysqldump  -uroot -p --host=localhost --all-databases --triggers

--tz-utc
在导出顶部设置时区TIME_ZONE='+00:00' ,以保证在不同时区导出的TIMESTAMP 数据或者数据被移动其他时区时的正确性。
mysqldump  -uroot -p --host=localhost --all-databases --tz-utc

--user, -u
指定连接的用户名。

--verbose, --v
输出多种平台信息。

--version, -V
输出mysqldump版本信息并退出

--where, -w
只转储给定的WHERE条件选择的记录。请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来。
mysqldump  -uroot -p --host=localhost --all-databases --where=” user=’root’”

--xml, -X
导出XML格式.
mysqldump  -uroot -p --host=localhost --all-databases --xml

--plugin_dir
客户端插件的目录,用于兼容不同的插件版本。
mysqldump  -uroot -p --host=localhost --all-databases --plugin_dir=”/usr/local/lib/plugin”

--default_auth
客户端插件默认使用权限。
mysqldump  -uroot -p --host=localhost --all-databases --default-auth=”/usr/local/lib/plugin/<PLUGIN>”

【例 】

  1. 备份所有数据库
mysqldump -uroot -p --all-databases > /backup/mysqldump/all.db
# 压缩后备份
mysqldump -uroot -p --all-databases | gzip > /backup/mysqldump/all.db
  1. 备份指定数据库:
mysqldump -uroot -p test > /backup/mysqldump/test.db
  1. 备份 db1、db2 两个数据库的所有数据
mysqldump -uroot -proot --databases db1 db2 >/tmp/user.sql
  1. 备份mysql数据库中的db表和event表 (多个表以空格间隔)
mysqldump -uroot -p  mysql db event > /backup/mysqldump/2table.db
# 或
mysqldump -uroot -p --databases mysql --tables db event  > /backup/mysqldump/2table.db

# 注意导出指定表只能针对一个数据库进行导出,且导出的内容中和导出数据库也不一样,导出指定表的导出文本中没有创建数据库的判断语句,只有删除表-创建表-导入数据
  1. 备份指定数据库排除某些表
mysqldump -uroot -p test --ignore-table=test.t1 --ignore-table=test.t2 > /backup/mysqldump/test2.db
  1. 条件导出,导出db1表a1中id=1的数据
# 字段是整形
mysqldump -uroot -proot --databases db1 --tables a1 --where='id=1'  >/tmp/a1.sql

# 字段是字符串,并且导出的sql中不包含drop table,create table
mysqldump -uroot -proot --no-create-info --databases db1 --tables a1 --where="id='a'"  >/tmp/a1.sql
  1. 生成新的binlog文件,-F
mysqldump -uroot -proot --databases db1 -F >/tmp/db1.sql
  1. 只导出表结构不导出数据,–no-data
mysqldump -uroot -proot --no-data --databases db1 >/tmp/db1.sql
  1. 跨服务器导出导入数据
mysqldump --host=h1 -uroot -proot --databases db1 |mysql --host=h2 -uroot -proot db2

将h1服务器中的db1数据库的所有数据导入到h2中的db2数据库中,db2的数据库必须存在否则会报错

mysqldump --host=192.168.80.137 -uroot -proot -C --databases test |mysql --host=192.168.80.133 -uroot -proot test

加上-C参数可以启用压缩传递。

  1. 将主库的binlog位置和文件名追加到导出数据的文件中,–dump-slave
    注意:–dump-slave命令如果当前服务器是从服务器那么使用该命令会执行stop slave来获取master binlog的文件和位置,等备份完后会自动执行start slave启动从服务器。但是如果是大的数据量备份会给从和主的延时变的更大,使用–dump-slave获取到的只是当前的从服务器的数据执行到的主的binglog的位置是(relay_mater_log_file,exec_master_log_pos),而不是主服务器当前的binlog执行的位置,主要是取决于主从的数据延时。
    该参数在在从服务器上执行,相当于执行show slave status。当设置为1时,将会以CHANGE MASTER命令输出到数据文件;设置为2时,会在change前加上注释
    该选项将会打开–lock-all-tables,除非–single-transaction被指定。
    在执行完后会自动关闭–lock-tables选项。–dump-slave默认是1
mysqldump -uroot -proot --dump-slave=1 --databases db1 >/tmp/db1.sql
mysqldump -uroot -proot --dump-slave=2 --database db1 >/tmp/db1.sql
  1. 将当前服务器的binlog的位置和文件名追加到输出文件,–master-data
    将该参数和–dump-slave方法一样,只是它是记录的是当前服务器的binlog,相当于执行show master status,状态(file,position)的值。
    将注意:–master-data不会停止当前服务器的主从服务
  2. --opt
    等同于 --add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 该选项默认开启, 可以用–skip-opt禁用.
mysqldump -uroot -p --host=localhost --all-databases --opt

如果运行mysqldump没有 --quick或 --opt选项,mysqldump在转储结果前将整个结果集装入内存。如果转储大数据库可能会出现问题。该选项默认启用,但可以用–skip-opt禁用。

如果使用最新版本的mysqldump程序生成一个转储重装到很旧版本的MySQL服务器中,不应使用 --opt或-e选项。

  1. 保证导出的一致性状态–single-transaction
    该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎(它不显示加锁通过判断版本来对比数据),仅InnoDB。本选项和 --lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用 --quick 选项。
--quick, -q
不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。
  1. –lock-tables, -l
    开始备份前,锁定所有表。用READ LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。
    请注意当导出多个数据库时, --lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出文件中的表在数据库之间的逻辑一致性。不同数据库表的导出状态可以完全不同。
  2. 导出存储过程和自定义函数 --routines, -R
mysqldump  -uroot -p --host=localhost --all-databases --routines
  1. 压缩备份
# 压缩备份
mysqldump -uroot -p -P3306 -q -Q --set-gtid-purged=OFF --default-character-set=utf8 --hex-blob --skip-lock-tables --databases abc 2>/abc.err |gzip >/abc.sql.gz
# 还原
gunzip -c abc.sql.gz |mysql -uroot -p -vvv -P3306 --default-character-set=utf8 abc 1> abc.log 2>abc.err
  1. 恢复数据库
# 恢复数据库中的表
mysql -uroot -p 库名 < /备份路径/备份文件名
# 恢复数据库中的数据库
mysql -u root -p < /backup/databases.sql

## 使用soure方法恢复
# 恢复数据库中的数据库
mysql > source /backup/mysqldump/db_name.db

# 恢复数据库中的表
mysql > use db_name
mysql > source /backup/mysqldump/tb_name.db