Cheatsheet

  • https://www.commandlinefu.com

Blog

  • dev.to

Cloud Computing

  • https://learntocloud.guide
  • https://www.server-world.info

Youtube

  • Belajar Data Science dari Nol : LINK

 

https://github.com/danigunawan/nopanel

Firewall Allow MySQL Remote Access (RHEL)

Prerequisites

  • firewalld
  • sudo privileges

Izinkan Akses MySQL Remote dengan Firewald

Step 1. Buat Sebuah Zona.

firewall-cmd –new-zone=mysql-access –permanent

Step 2. Untuk menerapkan perubahan, reload ulang firewalld.

firewall-cmd –reload

Jika Anda ingin memeriksa ulang dan membuat daftar zona firewalld, jalankan:

firewall-cmd –get-zones

Step 3. Pertama tambahkan alamat IP yang ingin Anda izinkan.

firewall-cmd –zone=mysql-access –add-source=96.52.17.9/32 –permanent

Step 4. Saya akan menambahkan port default MySQL 3306. Jika Anda menggunakan port kustom Anda sendiri, ubahlah di pengaturan.

firewall-cmd –zone=mysql-access –add-port=3306/tcp –permanent

Step 5. Muat ulang firewall untuk menerapkan perubahan baru.

firewall-cmd –reload

Step 6. Untuk memastikan zona akses mysql dikonfigurasi dengan benar, jalankan:

firewall-cmd –zone=mysql-access –list-all

Output:

mysql-access (active) target: default icmp-block-inversion: no interfaces: sources: 96.52.17.9/32 services: ports: 3306/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

Sekarang Anda harus dapat membuat koneksi antara server MySQL Anda dan mesin Anda. Kesimpulan

Jika Anda memerlukan beberapa aturan khusus untuk diaktifkan atau dinonaktifkan terkait MySQL bisa di konfigurasi dengan firewalld.

Typing vagrant from the command line will display a list of all available commands.

Be sure that you are in the same directory as the Vagrantfile when running these commands!

Creating a VM

vagrant init -- Initialize Vagrant with a Vagrantfile and ./.vagrant directory, using no specified base image. Before you can do vagrant up, you'll need to specify a base image in the Vagrantfile.
vagrant init <boxpath> -- Initialize Vagrant with a specific box. To find a box, go to the public Vagrant box catalog. When you find one you like, just replace it's name with boxpath. For example, vagrant init ubuntu/trusty64.

Starting a VM

vagrant up -- starts vagrant environment (also provisions only on the FIRST vagrant up)
vagrant resume -- resume a suspended machine (vagrant up works just fine for this as well)
vagrant provision -- forces reprovisioning of the vagrant machine
vagrant reload -- restarts vagrant machine, loads new Vagrantfile configuration
vagrant reload --provision -- restart the virtual machine and force provisioning

Getting into a VM

vagrant ssh -- connects to machine via SSH
vagrant ssh <boxname> -- If you give your box a name in your Vagrantfile, you can ssh into it with boxname. Works from any directory.

Stopping a VM

vagrant halt -- stops the vagrant machine
vagrant suspend -- suspends a virtual machine (remembers state)

Cleaning Up a VM

vagrant destroy -- stops and deletes all traces of the vagrant machine
vagrant destroy -f -- same as above, without confirmation

Boxes

vagrant box list -- see a list of all installed boxes on your computer
vagrant box add <name> <url> -- download a box image to your computer
vagrant box outdated -- check for updates vagrant box update
vagrant box remove <name> -- deletes a box from the machine
vagrant package -- packages a running virtualbox env in a reusable box

Saving Progress

-vagrant snapshot save [options] [vm-name] -- vm-name is often default. Allows us to save so that we can rollback at a later time Tips

vagrant -v -- get the vagrant version
vagrant status -- outputs status of the vagrant machine
vagrant global-status -- outputs status of all vagrant machines
vagrant global-status --prune -- same as above, but prunes invalid entries
vagrant provision --debug -- use the debug flag to increase the verbosity of the output
vagrant push -- yes, vagrant can be configured to deploy code!
vagrant up --provision | tee provision.log -- Runs vagrant up, forces provisioning and logs all output to a file

Plugins

vagrant-hostsupdater : $ vagrant plugin install vagrant-hostsupdater to update your /etc/hosts file automatically each time you start/stop your vagrant box.

Notes

If you are using VVV, you can enable xdebug by running vagrant ssh and then xdebug_on from the virtual machine's CLI.

Cheatsheet MySQL

 
# Mengizinkan MySQL client untuk menghubungkan ke Remote Host

mysql -u root -p
Enter password:
mysql> use mysql
mysql> GRANT ALL ON *.* to root@'192.168.1.4' IDENTIFIED BY 'your-root-password';
mysql> FLUSH PRIVILEGES;

# MySQL Database Dump

mysqldump -u user -p db-name > db-name.out

# Delete MySQL Data dari table

# Ada dua cara untuk menghapus semua data dalam tabel database MySQL.

TRUNCATE TABLE tablename;

# Ini akan menghapus semua data dalam tabel dengan sangat cepat. Di MySQL tabel sebenarnya didrop dan dibuat ulang, karenanya kecepatan kueri. Jumlah baris yang dihapus untuk tabel MyISAM yang dikembalikan adalah nol/kosong; untuk INNODB ia mengembalikan nomor aktual yang dihapus.

DELETE FROM tablename;

# Ini juga menghapus semua data dalam tabel, tetapi tidak secepat menggunakan metode "TRUNCATE TABLE". Di MySQL >= 4.0 jumlah baris yang dihapus dikembalikan; di MySQL 3.23 angka yang dikembalikan selalu nol.

# Mengekspor Skema/Struktur DB (tanpa data) saja

mysqldump -u root -p --no-data dbname > schema.sql

# Backup Multiple Database

mysqldump u[user name] p[password] [database name 1] [database name 2] .. > [dump file]

# Backup ALL Database

shell> mysqldump u[user name] p[password] all-databases > [dump file]

# Backup Specific Table in a Database

shell> mysqldump --user [username] --password=[password] [database name] [table name] > /tmp/sugarcrm_accounts_contacts.sql

# Restoring MySQL Database

shell> mysql --u [username] --password=[password] [database name] < [dump file]

# Export Database ke format Zipped (.gz)

mysqldump -hlocalhost -uUSERNAME -pPA$$W0RD DATABASE | gzip > /home/USERNAME/backups-mysql/BACKUP.gz

# Optimize Single Database:

./mysqlcheck -o database_name

# Optimize All Databases:

./mysqlcheck -o -A
 ./mysqlcheck -o --all-databases

# Analyze Single Database:

./mysqlcheck -a database_name

# Analyze All Databases:

./mysqlcheck -a -A
 ./mysqlcheck -a --all-databases

Repair Single Database:

./mysqlcheck -r database_name

# Repair All Databases:

./mysqlcheck -r -A
./mysqlcheck -r --all-databases

# Importing & Exprting a Table from Database

# Export
mysqldump -p - -user=username dbname tableName > tableName.sq

# Import 
mysql -u username -p -D dbname < tableName.sql

# MySQL Drop Table

mysql> use database 'yourdbname';

mysql> drop table 'yourtablename';

# View MySQL users and privileges

mysql> select user,host from mysql.user;
mysql> show grants for 'root'@'%';
mysql> select * from mysql.user;
mysql> desc mysql.user;
select host, user, password from mysql.user;

# Cara Membuat User MySQL Baru

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

# Hal pertama yang harus dilakukan adalah memberi pengguna akses ke informasi yang di butuhkan.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

# Setelah Anda menyelesaikan izin yang ingin Anda siapkan untuk pengguna baru Anda, selalu pastikan untuk memuat ulang semua hak istimewa.

FLUSH PRIVILEGES;

# Cara Memberikan Izin Pengguna MySQL
 
# Berikut adalah daftar singkat dari pemberian izin umum MySQL lainnya yang dapat dinikmati oleh user MySQL.

# ALL PRIVILEGES - seperti yang kita lihat sebelumnya, ini akan memungkinkan pengguna MySQL semua akses ke database yang ditunjuk (atau jika tidak ada database yang dipilih, di seluruh sistem)
# CREATE - memungkinkan untuk membuat tabel atau database baru
# DROP - memungkinkan untuk menghapus tabel atau database
# DELETE - memungkinkan untuk menghapus baris dari tabel
# INSERT - memungkinkan untuk memasukkan baris ke dalam tabel
# SELECT - memungkinkan untuk menggunakan perintah Select untuk membaca database
# UPDATE - izinkan memperbarui baris tabel
# GRANT OPTION - memungkinkan untuk memberikan atau menghapus hak istimewa pengguna lain

# Untuk memberikan izin kepada pengguna tertentu, Anda dapat menggunakan kerangka kerja ini :

GRANT [type of permission] ON [database name].[table name] 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;