MySQL Commands
Connect to MySQL
mysql -u aamnah -p —h db.mysite.com -P 3306 db_name
OR
mysql --user=username --password=password --host=host --port=3306 db_name
options | values |
---|---|
-u or --user |
username |
-p or --password |
password |
-h or --host |
host (default: localhost) |
-P or --port |
Port (default: 3306) |
Replace _dbname with the name of the database you want to connect to.
Check if MySQl port is open on current server
The default port is 3306
netstat -tln
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
If MySQL is running at host and the port is open and you still can’t connect,
nano /etc/mysql/mysql.conf.d/mysqld.cnf
uncomment the bind-address
line by adding a #
at the beginning
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
restart MySQL
sudo service mysql restart
CRUD Databases
Create MySQL database
mysql > CREATE DATABASE foo ;
Users and Privileges
Creating MySQL User
mysql> CREATE USER 'username'@'host' IDENTIFIED BY 'password' ;
Syntax for account names is ‘userName’@‘hostName’.
An account name consisting only of a user name is equivalent to ‘userName’@‘%’. For example, ‘me’ is equivalent to ‘me’@‘%’.
Change user password
SET PASSWORD FOR
'jeffrey'@'localhost' = PASSWORD('mypass');
If you are changing your own password and not of another user, you can omit the FOR
clause
SET PASSWORD = PASSWORD('mypass');
alter user 'user'@'host' identified with mysql_native_password by 'PASSWORD';
Allowing User to Connect
# grant usage on server so the user can connect
mysql> GRANT USAGE ON *.* TO 'username'@'host' ;
Granting Privileges
mysql> GRANT ALL PRIVILEGES ON databasename.* TO 'username'@'host' ;
CHECK if you can connect to the created database with the user you crteated
mysql -uusername -p --host=db.mysite.com databasename
Deleting MySQL User
mysql> DROP USER 'username'@'host' ;
List all users
SELECT User,Host FROM mysql.user;
+------------------+-----------+
| User | Host |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)
View Privileges and Roles for a user
SHOW GRANTS;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
SHOW GRANTS FOR 'jeffrey'@'localhost';
+------------------------------------------------------------------+
| Grants for jeffrey@localhost |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `jeffrey`@`localhost` |
| GRANT SELECT, INSERT, UPDATE ON `db1`.* TO `jeffrey`@`localhost` |
+------------------------------------------------------------------+
View Users and Permissions
SELECT user, host, password, select_priv, insert_priv, shutdown_priv, grant_priv FROM mysql.user
View User Permissions for individual Databases
SELECT user, host, db, select_priv, insert_priv, grant_priv FROM mysql.db
Backups
backup all databases in one file (eventually add the option –add-locks):
mysqldump -u username -p -–all-databases > file.sql
backup all databases in one gzipped file:
mysqldump -u username -p -–all-databases | gzip > file.sql.gz
backup selected databases
mysqldump -u username -p -–databases db1 db2 db3 | gzip > dbs.sql.gz
Restores
restore all databases:
mysql -u username -p < file.sql
restore compressed backup file
gunzip < [backupfile.sql.gz] | mysql -u [uname] -p[pass] [dbname]
Import SQL database
mysql -u username -p password databasename < filename.sql
Sample Command for creating a backup and restoring at remote server in one command:
mysqldump --user=root --password=password --host=mysql.mydomain.com db_1 | mysql --host=db.mysite.com --user=username --password=password db_1
Troubleshooting
- If not connecting, check if the port is open on the server you are connecting from. Default MySQL port is 3306. On KH server it couldn’t connect because the port was closed. Also, see if the allow remote login option is enabled/disabled.
- If the connection is not getting through the error would be ‘could not connect’.
- If login is incorrect the error would be ‘access denied’. mysql_connect(): Access denied for user.
- The user you are connecting with needs to be created at RDS. It doesn’t matter if the server you are connecting from has it or not.
Opening Ports
Ports should be opened in the firewall configuration. The default port for MySQL is 3306.
This can be accessed in WHM >> Plugins » ConfigServer Security & Firewall >> Firewall configuration >> Port settings