#MengizinkanMySQLclientuntukmenghubungkankeRemoteHostmysql-uroot-pEnterpassword:mysql>usemysqlmysql>GRANTALLON*.*toroot@'192.168.1.4'IDENTIFIEDBY'your-root-password';mysql>FLUSHPRIVILEGES;#MySQLDatabaseDumpmysqldump-uuser-pdb-name>db-name.out#DeleteMySQLDatadaritable#AdaduacarauntukmenghapussemuadatadalamtabeldatabaseMySQL.TRUNCATETABLEtablename;#Iniakanmenghapussemuadatadalamtabeldengansangatcepat.DiMySQLtabelsebenarnyadidropdandibuatulang,karenanyakecepatankueri.JumlahbarisyangdihapusuntuktabelMyISAMyangdikembalikanadalahnol/kosong;untukINNODBiamengembalikannomoraktualyangdihapus.DELETEFROMtablename;#Inijugamenghapussemuadatadalamtabel,tetapitidaksecepatmenggunakanmetode"TRUNCATE TABLE".DiMySQL>=4.0jumlahbarisyangdihapusdikembalikan;diMySQL3.23angkayangdikembalikanselalunol.#MengeksporSkema/StrukturDB(tanpadata)sajamysqldump-uroot-p--no-data dbname > schema.sql#BackupMultipleDatabasemysqldump–u[username]–p[password][databasename1][databasename2]..>[dumpfile]#BackupALLDatabaseshell>mysqldump–u[username]–p[password]–all-databases>[dumpfile]#BackupSpecificTableinaDatabaseshell>mysqldump--user [username] --password=[password] [database name] [table name] > /tmp/sugarcrm_accounts_contacts.sql#RestoringMySQLDatabaseshell>mysql--u [username] --password=[password] [database name] < [dump file]#ExportDatabasekeformatZipped(.gz)mysqldump-hlocalhost-uUSERNAME-pPA$$W0RDDATABASE|gzip>/home/USERNAME/backups-mysql/BACKUP.gz#OptimizeSingleDatabase:./mysqlcheck-odatabase_name#OptimizeAllDatabases:./mysqlcheck-o-A./mysqlcheck-o--all-databases#AnalyzeSingleDatabase:./mysqlcheck-adatabase_name#AnalyzeAllDatabases:./mysqlcheck-a-A./mysqlcheck-a--all-databasesRepairSingleDatabase:./mysqlcheck-rdatabase_name#RepairAllDatabases:./mysqlcheck-r-A./mysqlcheck-r--all-databases#Importing&ExprtingaTablefromDatabase#Exportmysqldump-p--user=usernamedbnametableName>tableName.sq#Importmysql-uusername-p-Ddbname<tableName.sql#MySQLDropTablemysql>usedatabase'yourdbname';mysql>droptable'yourtablename';#ViewMySQLusersandprivilegesmysql>selectuser,hostfrommysql.user;mysql>showgrantsfor'root'@'%';mysql>select*frommysql.user;mysql>descmysql.user;selecthost,user,passwordfrommysql.user;#CaraMembuatUserMySQLBaruCREATEUSER'newuser'@'localhost'IDENTIFIEDBY'password';#Halpertamayangharusdilakukanadalahmemberipenggunaakseskeinformasiyangdibutuhkan.GRANTALLPRIVILEGESON*.*TO'newuser'@'localhost';#SetelahAndamenyelesaikanizinyanginginAndasiapkanuntukpenggunabaruAnda,selalupastikanuntukmemuatulangsemuahakistimewa.FLUSHPRIVILEGES;#CaraMemberikanIzinPenggunaMySQL#BerikutadalahdaftarsingkatdaripemberianizinumumMySQLlainnyayangdapatdinikmatiolehuserMySQL.#ALLPRIVILEGES-sepertiyangkitalihatsebelumnya,iniakanmemungkinkanpenggunaMySQLsemuaakseskedatabaseyangditunjuk(ataujikatidakadadatabaseyangdipilih,diseluruhsistem)#CREATE-memungkinkanuntukmembuattabelataudatabasebaru#DROP-memungkinkanuntukmenghapustabelataudatabase#DELETE-memungkinkanuntukmenghapusbarisdaritabel#INSERT-memungkinkanuntukmemasukkanbariskedalamtabel#SELECT-memungkinkanuntukmenggunakanperintahSelectuntukmembacadatabase#UPDATE-izinkanmemperbaruibaristabel#GRANTOPTION-memungkinkanuntukmemberikanataumenghapushakistimewapenggunalain#Untukmemberikanizinkepadapenggunatertentu,Andadapatmenggunakankerangkakerjaini:GRANT[typeofpermission]ON[databasename].[tablename]TO‘[username]’@'localhost’;
# Jika Anda ingin memberi akses ke database atau tabel apa pun, pastikan untuk meletakkan tanda bintang (*) di tempat nama database atau nama tabel. Setiap kali Anda memperbarui atau mengubah izin, pastikan untuk menggunakan perintah Flush Privileges.
# Jika Anda perlu mencabut izin, strukturnya hampir sama dengan pemberiannya:
REVOKE [type of permission] ON [database name].[table name] FROM ‘[username]’@‘localhost’;
# Sama seperti Anda dapat menghapus database dengan DROP, Anda dapat menggunakan DROP untuk menghapus pengguna juga:
DROP USER ‘demo’@‘localhost’;
# Jalankan OPTIMIZE TABLE untuk mendefrag tabel untuk kinerja yang lebih baik
mysqlcheck -u username -p --auto-repair --optimize --all-databases
# Dapatkan ukuran Database MySQL dalam MB
SELECT table_schema AS "Database", ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema;
# LANJUTAN
# BACKUP ALL DATABASE
mysqldump -u root -p --all-databases | gzip -9 > alldb_backup_db_name_19_06_2022.gz
# BACKUP ALL DATABASE - SINGLE TRANSACTIONS WITHOUT LOCK_TABLES
mysqldump --single-transaction -u root -p --all-databases | gzip -9 > alldb_backup_db_name_19_06_2022_single_transactions.gz
# BACKUP SPECIFIC DATABASE - SINGLE TRANSACTIONS VIA QUICK AND COMPRESS WITHOUT LOCK_TABLES
mysqldump -v -h localhost --protocol=TCP -P 3306 -u root --compress --single-transaction --quick -pYourPasswdDB your_specific_db_name > specific_backup_db_name_19_06_2022_single_transactions.gz
# RESTORE ALL DATABASE
mysql -u root -p < alldb_backup_db_name_19_06_2022_single_transactions.sql
# RESTORE ALL DATABASE (FORCE REPLACE EXISTING)
mysql -f -u root -p < alldb_backup_db_name_19_06_2022_single_transactions.sql
# BACKUP VIEWS
cat alldb_backup_db_name_19_06_2022_single_transactions.sql | grep -A 3 "CREATE ALGORITHM" > backup_views_all_db_db_name_19_06_2022.sql
# TROUBLESHOOTING
1. [RESTORE DB] mysqldump: Got error: 1449: "The user specified as a definer ('other_user'@'%') does not exist" when using LOCK TABLES
Solusi :
# mysql -u root -p --force < alldb_backup_db_name_19_06_2022_single_transactions.gz
# In MySQL, how to return the week of the month?
FLOOR((DayOfMonth("2023-02-01")-1)/7)+1
# Mysql how to get First Monday of given year and Month
SET @firstday = '2023-01-01';
SELECT ADDDATE( @firstday , MOD((9-DAYOFWEEK(@firstday)),7)) as first_monday;