- MySQL Hints and Tips
MySQL Hints and Tips
These tips relate to using version 3.23.40 of MySQL
Starting
Linux
Most distributions will install mysql as a service that can be started with:
- /etc/init.d/mysql
Red Hat and Red Hat based distributions like Mandrake can be started with:
- service mysql start
To debug, stop the running service and run mysql from the command line. Ideally su to the mysql user first.
- mysqld --log=/tmp/mysql.log
Beware the log is likely to contain sensitive data, so check the permissions and shred it afterwards.
- shred -u /tmp/mysql.log
Windows 95 or 98
As a background task
- c:\mysql\bin\mysqld
or as a foreground task
- c:\mysql\bin\mysqld --standalone
Debug
- c:\mysql\bin\mysqld --standalone --debug
Output is written to c:\mysqld.trace
Windows NT or 2000
First install with
- c:\mysql\bin\mysqld-nt --install then
- net start mysql
Standalone
- c:\mysql\bin\mysqld-nt --standalone
If started standalone, use mysqldadmin to stop (see below)
Debug (Note: don't execute mysqld-nt use mysqld instead)
- c:\mysql\bin\mysqld --standalone --debug
Output is written to c:\mysqld.trace
- c:\mysql\bin\mysqld-nt --standalone --log
Log files are written to the database directory as hostname.log. This will show queries as they are executed. Usefull for debugging J2EE applications using CMP when you can't otherwise see the queries being executed.
Stopping
Windows NT or 2000
- net stop mysql
All versions
Stopping where no password has been set for root user
- c:\mysql\bin\mysqladmin -u root shutdown
where a password has been set
- c:\mysql\bin\mysqladmin -u root -p shutdown or
- c:\mysql\bin\mysqladmin -u root -pMyPasword shutdown
Creating new users
- GRANT ALL PRIVILEGES ON *.* TO user@localhost IDENTIFIED BY 'password' WITH GRANT OPTION
- GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION
- GRANT ALL PRIVILEGES ON mydb.* TO user@localhost IDENTIFIED BY 'password' WITH GRANT OPTION
To see the results of your handywork so far:
- use mysql
- Select * from db;
- Select * from tables_priv;
Note: the results depend on exactly which options were chosen, and there may not be entries in either of these tables.
Dont' forget to issue the following after changing any privileges:
- flush privileges;
Creating user with limited rights
This will give only select rights to dumbuser.
- grant select on mydb.mytable to dumbuser@localhost identified by 'secret';
Dumping table definitions and data
Example of common uses of the mysqldump utility:
- mysqldump --help
- mysqldump mydatabase
- mysqldump mydatabase mytable1 mytable2
- mysqldump --add-drop-table mydatabase
- mysqldump --add-drop-table --complete-insert mydatabase
BLOBS and TEXT
Where you are using BLOB or TEXT columns you may need to increase the value of the maxallowedpacket variable on both the server and client programs.
When using mysqldump:
$ mysqldump --all-databases --max_allowed_packet=128M
- -- Frank Dean - 29 Sep 2009
Creating a table from a select statement
- =CREATE TABLE t1 SELECT * FROM t2 WHERE c1 = 'X'=
MySQL Server Configuration
Useful my.cnf entries
[mysqld]
# Specify INNODB as the default table type - a transactional table type but slower than MYISAM
default-table-type=INNODB
# Default character set to use
character-set-server=utf8
collation-server=utf8_general_ci
# For apps that were developed on Windows and won't run on a case-significant system...
lower_case_table_names=1
# Support clients using the old (less secure) password system
old_passwords=true
[mysql]
default-character-set=utf8
Specify Password in Configuration File
Create .my.cnf in your home directory and include the password property under the 'client' section.
cat >> ~/.my.cnf <<EOF
[client]
password=secret
EOF
Schema
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='mydb'
;
Tables
(MySql 5.0.1+)
SELECT TABLE_NAME, ENGINE, TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA='mydb'
;
Views
(MySql 5.0.1+)
Display view names:
SELECT TABLENAME FROM INFORMATIONSCHEMA.VIEWS;
Display view definition:
SELECT VIEWDEFINITION FROM INFORMATIONSCHEMA.VIEWS WHERE TABLE_NAME
'myview';=
Columns
SELECT TABLENAME, COLUMNNAME, CHARACTERSETNAME, COLLATIONNAME FROM INFORMATIONSCHEMA.COLUMNS WHERE TABLE_SCHEMA
'mydb';=
Constraints
SELECT * FROM INFORMATIONSCHEMA.KEYCOLUMNUSAGE WHERE CONSTRAINTSCHEMA
'mydb' AND TABLE_NAME='mytable';=SELECT CONSTRAINTNAME, CONSTRAINTTYPE FROM INFORMATIONSCHEMA.TABLECONSTRAINTS WHERE CONSTRAINTSCHEMA
'mydb' AND TABLENAME='mytable';=
-- Frank Dean - 04 September 2003