# Mysql Api
cpanel features
- Create Database
mysql -u root -e "CREATE DATABASE dbname;"
- Delete Database
mysql -u root -e "DROP DATABASE dbname;"
- List Databases
mysql -u root -e "SHOW DATABASES;"
- Add New User
mysql -u root -e "CREATE USER 'userxyz123'@'%' IDENTIFIED BY 'password123';"
- Add User To Database
mysql -u root -e "GRANT ALL PRIVILEGES ON [dbname].[tablename] TO 'userxyz123'@'%';"
- List Users
mysql -u root -e "SELECT user FROM mysql.user;"
- Change User Password
mysql -u root -e "ALTER USER 'userxyz123'@'%' IDENTIFIED BY 'password1234';"
- Delete User
mysql -u root -e "DROP USER IF EXISTS 'username'@'hostname';"
- Rename Database
- Dump
- Create New
- Copy From Dump
- Set Previleges For User (Create,Delete,Alter......) (use GRANT ....)
- Remote Access From Hosts
- Use '%'
- Repair Database (no idea)
## Formats
```go=
useDbFormat = "USE `?`"
createUserFormat = "CREATE USER `?`@`?` IDENTIFIED BY ?"
updateUserPasswordFormat = "ALTER USER `?`@`?` IDENTIFIED BY ?"
dropUserFormat = "DROP USER IF EXISTS `?`@`?`"
renameUserFormat = "RENAME USER `?`@`?` TO `?`@`?`"
repairTableFormat = "REPAIR TABLE `?`"
createDbFormat = "CREATE DATABASE `?`"
dropDbFormat = "DROP DATABASE `?`"
grantFormat = "GRANT ? ON *.* TO `?`@`?`;"
revokeFormat = "REVOKE ? ON *.* TO `?`@`?`;"
```
## Progress
### Modify Db
- [x] Create (test covered)
- [x] Delete (test covered)
- [x] Repair (skipping test)
- [ ] Rename (skipping for now)
### Modify User
- [x] Create (test covered)
- [x] Delete (test covered)
- [x] Rename (test covered)
- [x] Update Password (test covered)
- [x] Assign User To Db (test covered)
- [x] Enable Permission (test covered)
- [x] Disable Permission (test covered)
### Issues
- Rename DB Name [skip for now]
- Enable/Disable Permission
- The connection user need to have `Grant Option` permission
### Changes Needed
```shell=
Create User : "CREATE USER `?`@`?` IDENTIFIED BY ?"
additional fields needed : hostname , password
hostname if remote '%', if local 'localhost' or if Ip 'ip'
Update User : "ALTER USER `?`@`?` IDENTIFIED BY ?"
additional fields needed : hostname and password
Delete User : "DROP USER IF EXISTS `?`@`?`"
additional fields needed : hostname
Rename User : "RENAME USER `?`@`?` TO `?`@`?`"
additional fields needed : hostname
Enable Permissions : "GRANT ? ON *.* TO `?`@`?`;"
additional fields needed : hostname
Disable Permissions : "REVOKE ? ON *.* FROM `?`@`?`;"
additional fields needed : hostname
Assign User To Db : "GRANT ALL PRIVILEGES ON `?`.* TO `?`@`?`"
additional fields needed : hostname
Also rather than just assigning, need to add with permissions
```