Secara default, Looker menggunakan database dalam memori HyperSQL untuk menyimpan konfigurasinya, pengguna, dan data lainnya. Pada instance yang sibuk, database ini dapat membesar hingga berukuran gigabyte, yang dapat menyebabkan masalah performa, tekanan memori Java, dan waktu startup yang lama.
Pada instance yang dihosting pelanggan, sebaiknya ganti database HyperSQL dengan backend database MySQL lengkap saat database HyperSQL internal berukuran melebihi 600 MB. Untuk memeriksa ukuran database HyperSQL, lihat ukuran file looker.script
:
cd looker
cd .db
ls -lah
Jika ukuran file looker.script
melebihi 600 MB, ikuti prosedur berikut untuk bermigrasi ke database MySQL eksternal.
Menyediakan instance MySQL
Menyediakan instance MySQL 8.0.x untuk digunakan sebagai backend. Versi MySQL sebelum 8.0 tidak didukung.
Di RDS AWS, instance class db.m5.large
mungkin cukup sebagai backend untuk satu instance Looker. Meskipun penggunaan database yang sebenarnya kemungkinan akan berada dalam kisaran 5-10 GB, sebaiknya sediakan 100-150 GB penyimpanan SSD karena IOPS yang disediakan didasarkan pada jumlah penyimpanan yang diminta.
MySQL 8.0.X — mengubah plugin autentikasi default
Di MySQL 8.0.X, plugin autentikasi default adalah caching_sha2_password
. Looker menggunakan plugin mysql_native_password
untuk mencoba mengautentikasi ke database MySQL melalui driver JDBC. Agar versi MySQL ini berfungsi dengan baik, Anda harus melakukan langkah-langkah tambahan berikut:
Konfigurasi database MySQL untuk menggunakan plugin
mysql_native_password
. Hal ini dapat dilakukan dalam beberapa cara, dan akan bergantung pada bagaimana database MySQL 8 Anda di-deploy dan jenis akses apa yang Anda miliki untuk konfigurasi:Memulai proses dengan flag
--default-auth=mysql_native_password
Tetapkan properti di file konfigurasi
my.cnf
:[mysqld] default-authentication-plugin=mysql_native_password
Jika instance database Anda dihosting melalui AWS RDS, tetapkan parameter
default_authentication_plugin
melalui Grup Parameter RDS yang diterapkan ke instance database ini.
Berikan pernyataan berikut, ganti
some_password_here
dengan sandi yang unik dan aman:CREATE USER looker IDENTIFIED WITH mysql_native_password BY 'some_password_here'; GRANT SELECT ON database_name.* TO 'looker'@'%';
Sesuaikan MySQL
Sesuaikan setelan berikut pada instance MySQL Anda.
Meningkatkan ukuran paket maksimum
Ukuran max_allowed_packet
default MySQL terlalu kecil untuk migrasi database dan dapat menyebabkan kegagalan migrasi dengan error PACKET_TOO_LARGE
. Tetapkan max_allowed_packet
ke nilai maksimum yang diizinkan sebesar 1073741824
:
max_allowed_packet = 1073741824
Tetapkan algoritma tabel sementara
MySQL 8 menangani tabel sementara internal secara berbeda dari versi sebelumnya. Setelan default dapat menyebabkan masalah saat menjalankan beberapa kueri yang diperlukan untuk dijalankan oleh Looker, terutama untuk instance Looker dengan banyak pengguna dan project. Praktik terbaiknya adalah menetapkan setelan server global berikut:
internal_tmp_mem_storage_engine = MEMORY
Mengonfigurasi himpunan karakter
Atur parameter default berikut untuk menggunakan UTF8mb4, yang mendukung himpunan karakter UTF8. Lihat artikel Di MySQL, jangan pernah gunakan "utf8". Gunakan "utf8mb4". untuk informasi tentang alasan kami merekomendasikan penggunaan UTF8mb4 — bukan UTF8 — dengan MySQL.
character_set_client = utf8mb4
character_set_results = utf8mb4
character_set_connection = utf8mb4
character_set_database = utf8mb4
character_set_server = utf8mb4
collation_connection = utf8mb4_general_ci
collation_server = utf8mb4_general_ci
Di instance Amazon RDS, Anda menerapkan setelan ini dengan membuat atau mengubah grup parameter dan mengedit setelan yang sesuai. Sebaiknya salin grup parameter saat ini dan lakukan perubahan pada salinannya, terutama jika Anda berbagi grup parameter di beberapa instance RDS. Setelah menyimpan grup parameter, terapkan parameter tersebut ke instance RDS. Mungkin perlu memulai ulang.
Menetapkan skema replika
Looker bergantung pada fungsi yang memerlukan binlog mixed
atau row
. Jika Anda menghosting instance MySQL Anda sendiri, tetapkan binlog_format
ke mixed
atau row
dengan mengeluarkan salah satu perintah berikut:
SET GLOBAL binlog_format = 'MIXED';
atau
SET GLOBAL binlog_format = 'ROW';
Membuat database dan pengguna
Membuat pengguna dan database pada instance database, dengan mengganti <DB_username>
, <DB_name>
, dan <DB_password>
dengan nilai sebenarnya untuk pengguna dan database. Selain itu, ganti <DB_charset>
dan <DB_collation>
dengan himpunan karakter yang dipilih dan kolasi yang cocok dengan setelan grup parameter instance RDS (untuk dukungan UTF8 yang sebenarnya, sebaiknya gunakan utf8mb4
dan utf8mb4_general_ci
).
create user <DB_username>;
set password for <DB_username> = password ('<DB_password>');
create database <DB_name> default character set <DB_charset> default collate <DB_collation>;
grant all on <DB_name>.* to <DB_username>@'%';
grant all on looker_tmp.* to '<DB_username>'@'%';
Database looker_tmp
di baris terakhir tidak harus benar-benar ada, tetapi pernyataan grant
diperlukan untuk pelaporan internal.
Membuat file kredensial database
Looker perlu mengetahui database MySQL yang akan digunakan untuk berbicara dan kredensial yang akan digunakan. Di direktori Looker, buat file bernama looker-db.yml
dengan konten berikut, dan ganti <DB_hostname>
, <DB_username>
, <DB_password>
, dan <DB_name>
dengan nilai untuk database Anda:
dialect: mysql
host: <DB_hostname>
username: <DB_username>
password: <DB_password>
database: <DB_name>
port: 3306
Jika database MySQL Anda memerlukan koneksi SSL, tambahkan baris berikut ke looker-db.yml
:
ssl: true
Jika Anda juga ingin mengaktifkan verifikasi sertifikat SSL, tambahkan baris berikut ke looker-db.yml
:
verify_ssl: true
Secara opsional, Anda juga dapat menentukan parameter JDBC tambahan lainnya yang didukung oleh Driver JDBC MariaDB dengan menambahkan jdbc_additional_params
. Misalnya, jika Anda perlu menggunakan file Trust Store tertentu, Anda dapat menambahkan parameter berikut ke string koneksi JDBC MySQL:
jdbc_additional_params: trustStore=/path/to/my/truststore.jks&keyStore=/path/to/my/keystore.jks
Untuk penginstalan yang dihosting pelanggan, Anda dapat secara opsional menentukan jumlah koneksi maksimum yang dapat dibuat Looker dengan database Anda dengan menambahkan max_connections
. Misalnya, untuk membatasi jumlah koneksi serentak ke database Anda hingga 10, tambahkan baris berikut:
max_connections: 10
Pada skema enkripsi Looker, semua data sensitif dalam database dienkripsi saat dalam penyimpanan. Meskipun seseorang mendapatkan akses ke kredensial database teks biasa dan mengakses database, Looker akan mengenkripsi atau melakukan hashing pada data sensitif sebelum disimpan. Hal ini berlaku untuk sandi, kredensial database analisis, cache kueri, dan sebagainya. Namun, jika tidak ingin menyimpan sandi cleartext untuk konfigurasi ini dalam file looker-db.yml
pada disk, Anda dapat mengonfigurasi variabel lingkungan LOOKER_DB
agar berisi daftar kunci/nilai untuk setiap baris dalam file looker-db.yml
. Contoh:
export LOOKER_DB="dialect=mysql&host=localhost&username=root&password=&database=looker&port=3306"
Mencadangkan direktori .db
Cadangkan direktori .db
yang berisi file yang diperlukan untuk membangun database HyperSQL dalam memori, jika Anda perlu memulihkan HyperSQL:
cp -r .db .db-backup
tar -zcvf db-backup.tar.gz ./.db-backup
Memigrasikan database
Migrasi database ke MySQL dapat menghabiskan waktu berjam-jam pada instance sedang atau besar, terutama jika database HyperSQL berukuran 1 GB atau lebih. Sebaiknya upgrade instance EC2 untuk sementara ke m5.2xlarge
(dengan RAM 32 GB untuk memungkinkan heap 26 GB yang ditentukan dalam langkah-langkah) selama migrasi, sehingga mengurangi waktu yang diperlukan menjadi ~10 menit.
Di host Looker:
cd looker ./looker stop vi looker
Di skrip startup Looker, buat baris kedua baru dalam file:
exit
Hentikan instance di konsol AWS. Setelah berhenti, ubah ukuran instance EC2 menjadi
m5.2xlarge
. Kemudian, mulai kembali instance tersebut.SSH ke host sebagai pengguna Looker. Pertama-tama, pastikan Java tidak berjalan; lalu jalankan:
cd looker java -Xms26000m -Xmx26000m -jar looker.jar migrate_internal_data looker-db.yml
Saat menjalankan langkah
migrate_internal_data
,libcrypt
mungkin tidak ditemukan dan pelacakan tumpukan akan muncul, dimulai dengan ini:NotImplementedError: getppid unsupported or native support failed to load ppid at org/jruby/RubyProcess.java:752 ppid at org/jruby/RubyProcess.java:749
Jika ini terjadi, setel
LD_LIBRARY_PATH
secara manual sebelum menjalankan perintah Java:export LD_LIBRARY_PATH=$HOME/looker/.tmp/:$LD_LIBRARY_PATH
Setelah berhasil diselesaikan, hentikan instance dari konsol AWS.
Sekarang Anda dapat memulihkan instance ke ukuran aslinya.
Mulai kembali instance tersebut.
Mulai Looker
Edit skrip startup Looker dan hapus baris
exit
yang Anda tambahkan sebelumnya.Pastikan tidak ada argumen yang ditentukan di
LOOKERARGS
dalam skrip startup. Sebagai gantinya, argumen apa pun harus dipindahkan ke filelookerstart.cfg
agar tidak ditimpa oleh skrip startup versi baru. Simpan dan keluar dari skrip startup.Edit
lookerstart.cfg
. Konfigurasinya akan terlihat seperti berikut:LOOKERARGS="-d looker-db.yml"
Jika ada argumen lain dalam skrip startup Looker, tambahkan argumen tersebut ke file
lookerstart.cfg
.Arsipkan direktori
.db
, jika belum diarsipkan.mv .db .db-backup tar -zcvf db-backup.tar.gz ./.db-backup rm -rf ./.db-backup/
Mulai Looker:
./looker start
Memastikan Looker menggunakan database baru
Jika Looker berhasil menggunakan backend MySQL, Anda akan melihat koneksi jaringan antara instance Looker dan instance database baru. Untuk memeriksanya, jalankan perintah berikut pada instance Looker:
netstat -na | grep 3306
Anda akan melihat beberapa koneksi ke instance database. Berikut adalah contoh output, yang menunjukkan instance DB di alamat IP 10.0.3.155
:
looker@instance1:~$ netstat -na | grep 3306
tcp6 0 0 10.0.5.131:56583 10.0.3.155:3306 ESTABLISHED
tcp6 0 0 10.0.5.131:56506 10.0.3.155:3306 ESTABLISHED
tcp6 0 0 10.0.5.131:56582 10.0.3.155:3306 ESTABLISHED
tcp6 0 0 10.0.5.131:56508 10.0.3.155:3306 ESTABLISHED
Mencadangkan Looker
Setelah Anda bermigrasi ke backend MySQL, cadangan S3 otomatis Looker tidak akan berfungsi lagi. Kami merekomendasikan minimal pencadangan database MySQL setiap malam bersama pencadangan sistem file setiap malam dari direktori kerja Looker. Direktori looker/log/
mungkin dikecualikan dari cadangan sistem file. Lihat halaman dokumentasi Membuat cadangan untuk informasi selengkapnya.