Browse Source

mysql tuner

windhamdavid 2 years ago
parent
commit
267ab69815
4 changed files with 182 additions and 0 deletions
  1. 1 0
      Summary.md
  2. 161 0
      db/mysql.md
  3. 4 0
      server/apache.md
  4. 16 0
      server/ufw.md

+ 1 - 0
Summary.md

@@ -32,6 +32,7 @@
 * [Server](server/_servers.md)
 	* [Apache](server/apache.md)
 	* [iptables](server/iptables.md)
+	* [UFW](server/ufw.md)
 	* [Letsencrypt](server/letsencrypt.md)
 	* [Ubuntu](server/ubuntu.md)
 	* [Nginx](server/nginx.md)

+ 161 - 0
db/mysql.md

@@ -1 +1,162 @@
 # MySQL  
+
+### commands
+
+    mysql > status  
+    mysql > exhibit
+
+
+    Access monitor: `mysql -u [username] -p;` (will prompt for password)
+
+Show all databases: `show databases;`
+
+Access database: `mysql -u [username] -p [database]` (will prompt for password)
+
+Create new database: `create database [database];`
+
+Select database: `use [database];`
+
+Determine what database is in use: `select database();`
+
+Show all tables: `show tables;`
+
+Show table structure: `describe [table];`
+
+List all indexes on a table: `show index from [table];`
+
+Create new table with columns: `CREATE TABLE [table] ([column] VARCHAR(120), [another-column] DATETIME);`
+
+Adding a column: `ALTER TABLE [table] ADD COLUMN [column] VARCHAR(120);`
+
+Adding a column with an unique, auto-incrementing ID: `ALTER TABLE [table] ADD COLUMN [column] int NOT NULL AUTO_INCREMENT PRIMARY KEY;`
+
+Inserting a record: `INSERT INTO [table] ([column], [column]) VALUES ('[value]', [value]');`
+
+MySQL function for datetime input: `NOW()`
+
+Selecting records: `SELECT * FROM [table];`
+
+Explain records: `EXPLAIN SELECT * FROM [table];`
+
+Selecting parts of records: `SELECT [column], [another-column] FROM [table];`
+
+Counting records: `SELECT COUNT([column]) FROM [table];`
+
+Counting and selecting grouped records: `SELECT *, (SELECT COUNT([column]) FROM [table]) AS count FROM [table] GROUP BY [column];`
+
+Selecting specific records: `SELECT * FROM [table] WHERE [column] = [value];` (Selectors: `<`, `>`, `!=`; combine multiple selectors with `AND`, `OR`)
+
+Select records containing `[value]`: `SELECT * FROM [table] WHERE [column] LIKE '%[value]%';`
+
+Select records starting with `[value]`: `SELECT * FROM [table] WHERE [column] LIKE '[value]%';`
+
+Select records starting with `val` and ending with `ue`: `SELECT * FROM [table] WHERE [column] LIKE '[val_ue]';`
+
+Select a range: `SELECT * FROM [table] WHERE [column] BETWEEN [value1] and [value2];`
+
+Select with custom order and only limit: `SELECT * FROM [table] WHERE [column] ORDER BY [column] ASC LIMIT [value];` (Order: `DESC`, `ASC`)
+
+Updating records: `UPDATE [table] SET [column] = '[updated-value]' WHERE [column] = [value];`
+
+Deleting records: `DELETE FROM [table] WHERE [column] = [value];`
+
+Delete *all records* from a table (without dropping the table itself): `DELETE FROM [table];`
+(This also resets the incrementing counter for auto generated columns like an id column.)
+
+Delete all records in a table: `truncate table [table];`
+
+Removing table columns: `ALTER TABLE [table] DROP COLUMN [column];`
+
+Deleting tables: `DROP TABLE [table];`
+
+Deleting databases: `DROP DATABASE [database];`
+
+Custom column output names: `SELECT [column] AS [custom-column] FROM [table];`
+
+Export a database dump (more info [here](http://stackoverflow.com/a/21091197/1815847)): `mysqldump -u [username] -p [database] > db_backup.sql`
+
+Use `--lock-tables=false` option for locked tables (more info [here](http://stackoverflow.com/a/104628/1815847)).
+
+Import a database dump (more info [here](http://stackoverflow.com/a/21091197/1815847)): `mysql -u [username] -p -h localhost [database] < db_backup.sql`
+
+Logout: `exit;`
+
+
+Aggregate functions
+-----------
+
+Select but without duplicates: `SELECT distinct name, email, acception FROM owners WHERE acception = 1 AND date >= 2015-01-01 00:00:00`
+
+Calculate total number of records: `SELECT SUM([column]) FROM [table];`
+
+Count total number of `[column]` and group by `[category-column]`: `SELECT [category-column], SUM([column]) FROM [table] GROUP BY [category-column];`
+
+Get largest value in `[column]`: `SELECT MAX([column]) FROM [table];`
+
+Get smallest value: `SELECT MIN([column]) FROM [table];`
+
+Get average value: `SELECT AVG([column]) FROM [table];`
+
+Get rounded average value and group by `[category-column]`: `SELECT [category-column], ROUND(AVG([column]), 2) FROM [table] GROUP BY [category-column];`
+
+
+Multiple tables
+-----------
+
+Select from multiple tables: `SELECT [table1].[column], [table1].[another-column], [table2].[column] FROM [table1], [table2];`
+
+Combine rows from different tables: `SELECT * FROM [table1] INNER JOIN [table2] ON [table1].[column] = [table2].[column];`
+
+Combine rows from different tables but do not require the join condition: `SELECT * FROM [table1] LEFT OUTER JOIN [table2] ON [table1].[column] = [table2].[column];` (The left table is the first table that appears in the statement.)
+
+Rename column or table using an _alias_: `SELECT [table1].[column] AS '[value]', [table2].[column] AS '[value]' FROM [table1], [table2];`
+
+
+Users functions
+-----------
+
+List all users: `SELECT User,Host FROM mysql.user;`
+
+Create new user: `CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';`
+
+Grant `ALL` access to user for `*` tables: `GRANT ALL ON database.* TO 'user'@'localhost';`
+
+##### Remote database Server   
+
+      sudo apt-get install mysql-server
+      systemctl status mysql
+      mysql_secure_installation
+      sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
+      [mysqld]
+      bind-address = [database server IP address]
+      [add] require_secure_transport = on
+
+setup ssl   
+
+      sudo mysql_ssl_rsa_setup --uid=mysql
+      sudo systemctl restart mysql
+
+check that it's listening for external connection
+
+      sudo netstat -plunt | grep mysqld
+
+make sure the port is open on the servers   
+
+      sudo ufw allow mysql
+
+      sudo iptables -L -nv --line-numbers
+      sudo iptables -I INPUT 7 -p tcp --dport 3306 -m state --state NEW -j ACCEPT
+see also [iptables](../server/iptables.md) & [UFW](../server/ufw.md)
+
+
+###Performance Tuning
+
+[https://github.com/major/MySQLTuner-perl](https://github.com/major/MySQLTuner-perl)
+
+      wget http://mysqltuner.pl/ -O mysqltuner.pl
+      perl mysqltuner.pl --host targetDNS_IP --user admin_user --pass admin_password
+
+### avoid swapping
+  [https://mariadb.com/kb/en/mariadb/configuring-swappiness/](https://mariadb.com/kb/en/mariadb/configuring-swappiness/)
+
+## MariaDB

+ 4 - 0
server/apache.md

@@ -0,0 +1,4 @@
+# Apache
+
+#### mod_evasive  
+[https://www.linode.com/docs/web-servers/apache-tips-and-tricks/modevasive-on-apache](https://www.linode.com/docs/web-servers/apache-tips-and-tricks/modevasive-on-apache)

+ 16 - 0
server/ufw.md

@@ -0,0 +1,16 @@
+#UFW  
+
+#### Install
+
+      sudo apt-get install ufw
+
+      //commands
+      sudo ufw allow 22
+      sudo ufw deny 111
+
+      sudo ufw allow from 123.45.67.89
+      sudo ufw allow from 123.45.67.89 to any port 22 proto tcp
+
+      sudo ufw delete allow 80
+
+      sudo ufw enable