.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "MYSQL_TABLEINFO 1" .TH MYSQL_TABLEINFO 1 "2003-04-05" "perl v5.8.0" "User Contributed Perl Documentation" .SH "NAME" mysql_tableinfo \- creates and populates information tables with the output of SHOW DATABASES, SHOW TABLES (or SHOW TABLE STATUS), SHOW COLUMNS and SHOW INDEX. .PP This is version 1.1. .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& mysql_tableinfo [OPTIONS] database_to_write [database_like_wild] [table_like_wild] .Ve .PP .Vb 2 \& Do not backquote (``) database_to_write, \& and do not quote ('') database_like_wild or table_like_wild .Ve .PP .Vb 1 \& Examples: .Ve .PP .Vb 1 \& mysql_tableinfo info .Ve .PP .Vb 1 \& mysql_tableinfo info this_db .Ve .PP .Vb 1 \& mysql_tableinfo info %a% b% .Ve .PP .Vb 1 \& mysql_tableinfo info --clear-only .Ve .PP .Vb 1 \& mysql_tableinfo info --col --idx --table-status .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" mysql_tableinfo asks a MySQL server information about its databases, tables, table columns and index, and stores this in tables called `db`, `tbl` (or `tbl_status`), `col`, `idx` (with an optional prefix specified with \-\-prefix). After that, you can query these information tables, for example to build your admin scripts with \s-1SQL\s0 queries, like .PP \&\s-1SELECT\s0 \s-1CONCAT\s0(\*(L"\s-1CHECK\s0 \s-1TABLE\s0 \*(R",`database`,\*(L".\*(R",`table`,\*(L" \s-1EXTENDED\s0;\*(R") \&\s-1FROM\s0 info.tbl \s-1WHERE\s0 ... ; .PP as people usually do with some other \s-1RDBMS\s0 (note: to increase the speed of your queries on the info tables, you may add some index on them). .PP The database_like_wild and table_like_wild instructs the program to gather information only about databases and tables whose names match these patterns. If the info tables already exist, their rows matching the patterns are simply deleted and replaced by the new ones. That is, old rows not matching the patterns are not touched. If the database_like_wild and table_like_wild arguments are not specified on the command-line they default to \*(L"%\*(R". .PP The program : .PP \&\- does \s-1CREATE\s0 \s-1DATABASE\s0 \s-1IF\s0 \s-1NOT\s0 \s-1EXISTS\s0 database_to_write where database_to_write is the database name specified on the command\-line. .PP \&\- does \s-1CREATE\s0 \s-1TABLE\s0 \s-1IF\s0 \s-1NOT\s0 \s-1EXISTS\s0 database_to_write.`db` .PP \&\- fills database_to_write.`db` with the output of \&\s-1SHOW\s0 \s-1DATABASES\s0 \s-1LIKE\s0 database_like_wild .PP \&\- does \s-1CREATE\s0 \s-1TABLE\s0 \s-1IF\s0 \s-1NOT\s0 \s-1EXISTS\s0 database_to_write.`tbl` (respectively database_to_write.`tbl_status` if the \-\-tbl\-status option is on) .PP \&\- for every found database, fills database_to_write.`tbl` (respectively database_to_write.`tbl_status`) with the output of \&\s-1SHOW\s0 \s-1TABLES\s0 \s-1FROM\s0 found_db \s-1LIKE\s0 table_like_wild (respectively \s-1SHOW\s0 \s-1TABLE\s0 \s-1STATUS\s0 \s-1FROM\s0 found_db \s-1LIKE\s0 table_like_wild) .PP \&\- if the \-\-col option is on, * does \s-1CREATE\s0 \s-1TABLE\s0 \s-1IF\s0 \s-1NOT\s0 \s-1EXISTS\s0 database_to_write.`col` * for every found table, fills database_to_write.`col` with the output of \s-1SHOW\s0 \s-1COLUMNS\s0 \s-1FROM\s0 found_tbl \s-1FROM\s0 found_db .PP \&\- if the \-\-idx option is on, * does \s-1CREATE\s0 \s-1TABLE\s0 \s-1IF\s0 \s-1NOT\s0 \s-1EXISTS\s0 database_to_write.`idx` * for every found table, fills database_to_write.`idx` with the output of \s-1SHOW\s0 \s-1INDEX\s0 \s-1FROM\s0 found_tbl \s-1FROM\s0 found_db .PP Some options may modify this general scheme (see below). .PP As mentioned, the contents of the info tables are the output of \&\s-1SHOW\s0 commands. In fact the contents are slightly more complete : .PP \&\- the `tbl` (or `tbl_status`) info table has an extra column which contains the database name, .PP \&\- the `col` info table has an extra column which contains the table name, and an extra column which contains, for each described column, the number of this column in the table owning it (this extra column is called `Seq_in_table`). `Seq_in_table` makes it possible for you to retrieve your columns in sorted order, when you are querying the `col` table. .PP \&\- the `index` info table has an extra column which contains the database name. .PP Caution: info tables contain certain columns (e.g. Database, Table, Null...) whose names, as they are MySQL reserved words, need to be backquoted (`...`) when used in \s-1SQL\s0 statements. .PP Caution: as information fetching and info tables filling happen at the same time, info tables may contain inaccurate information about themselves. .SH "OPTIONS" .IX Header "OPTIONS" .IP "\-\-clear" 4 .IX Item "--clear" Does \s-1DROP\s0 \s-1TABLE\s0 on the info tables (only those that the program is going to fill, for example if you do not use \-\-col it won't drop the `col` table) and processes normally. Does not drop database_to_write. .IP "\-\-clear\-only" 4 .IX Item "--clear-only" Same as \-\-clear but exits after the DROPs. .IP "\-\-col" 4 .IX Item "--col" Adds columns information (into table `col`). .IP "\-\-idx" 4 .IX Item "--idx" Adds index information (into table `idx`). .IP "\-\-prefix prefix" 4 .IX Item "--prefix prefix" The info tables are named from the concatenation of prefix and, respectively, db, tbl (or tbl_status), col, idx. Do not quote ('') or backquote (``) prefix. .IP "\-q, \-\-quiet" 4 .IX Item "-q, --quiet" Does not warn you about what the script is going to do (\s-1DROP\s0 \s-1TABLE\s0 etc) and does not ask for a confirmation before starting. .IP "\-\-tbl\-status" 4 .IX Item "--tbl-status" Instead of using \s-1SHOW\s0 \s-1TABLES\s0, uses \s-1SHOW\s0 \s-1TABLE\s0 \s-1STATUS\s0 (much more complete information, but slower). .IP "\-\-help" 4 .IX Item "--help" Display helpscreen and exit .IP "\-u, \-\-user=#" 4 .IX Item "-u, --user=#" user for database login if not current user. Give a user who has sufficient privileges (\s-1CREATE\s0, ...). .IP "\-p, \-\-password=# (INSECURE)" 4 .IX Item "-p, --password=# (INSECURE)" password to use when connecting to server. WARNING: Providing a password on command line is insecure as it is visible through /proc to anyone for a short time. .IP "\-h, \-\-host=#" 4 .IX Item "-h, --host=#" host to connect to .IP "\-P, \-\-port=#" 4 .IX Item "-P, --port=#" port to use when connecting to server .IP "\-S, \-\-socket=#" 4 .IX Item "-S, --socket=#" \&\s-1UNIX\s0 domain socket to use when connecting to server .SH "WARRANTY" .IX Header "WARRANTY" This software is free and comes without warranty of any kind. You should never trust backup software without studying the code yourself. Study the code inside this script and only rely on it if \fIyou\fR believe that it does the right thing for you. .Sp Patches adding bug fixes, documentation and new features are welcome. .SH "TO DO" .IX Header "TO DO" Use extended inserts to be faster (for servers with many databases or tables). But to do that, must care about net\-buffer\-length. .SH "AUTHOR" .IX Header "AUTHOR" 2002\-06\-18 Guilhem Bichot (guilhem.bichot@mines\-paris.org) .Sp And all the authors of mysqlhotcopy, which served as a model for the structure of the program.