Connettere ed eseguire query sul database di Adobe Commerce
Scopri come connettersi a un progetto Adobe Commerce su cloud, creare un’immagine di database per l’utilizzo fuori sede e mascherare o rimuovere informazioni personali (PII, personally identifiable information). Accedere ai dati con un dump locale, un'interfaccia utente grafica come MySQL Workbench o TablePlus o l'interfaccia CLI magento-cloud.
Contenuti video
- Connettiti a un progetto Adobe Commerce Cloud remoto con uno strumento GUI come MySQL Workbench o TablePlus.
- Connettersi al progetto ed eseguire SQL dalla riga di comando.
Puoi accedere ai dati di Adobe Commerce dal progetto cloud utilizzando uno dei seguenti metodi:
- Utilizza un dump del database locale.
- Aprire una connessione DB all'ambiente cloud remoto con un'applicazione quale MySQL Workbench o TablePlus.
- Connettersi direttamente all'ambiente cloud con CLI
magento-clouded eseguire i comandi sul server remoto.
Per rimuovere le informazioni sul cliente, preferisci un dump del database che esegui lo scorrimento. Rimuovi completamente i dati del cliente quando non ne hai bisogno.
Utilizzo dello strumento CLI di Adobe Commerce Cloud
Per creare un dump del database è necessario installare Adobe Commerce Cloud CLI. Nel computer locale aprire una directory ed eseguire il comando seguente. Sostituisci your-project-id con il tuo ID progetto (simile a asasdasd45q). Sostituisci your-environment-name con il nome dell'ambiente, ad esempio master o staging.
magento-cloud db:dump -p your-project-id -e your-environment-name
Se non sei sicuro dell’ID del progetto o dell’ambiente, puoi omettere questi elementi nel comando:
magento-cloud db:dump
La CLI richiede di specificare il progetto e l'ambiente corretti. Nell'esempio seguente viene visualizzata tale finestra di dialogo. Questo esempio mostra diversi progetti assegnati al tuo account, ma probabilmente avrai a disposizione un solo progetto.
Cambia in una directory
cd ~/Downloads/db-tutorial
Ora esegui il comando per creare l’immagine del database
magento-cloud db:dump
Poiché non hai specificato un progetto o un ambiente, la CLI di Adobe Commerce Cloud pone alcune domande. L’esempio seguente mostra una finestra di dialogo di esempio.
Enter a number to choose a project:
[0] demo-ralbin (ral32nryq4123)
[1] adobe-commerce-demo (abc123zzkipexnqo)
[2] DX Tutorials - Commerce (abasrpikfw4123)
> 2
Enter a number to choose an environment:
Default: master
[0] master (type: production)
[1] remote-db (type: development)
> 1
Creating SQL dump file: /Users/<username>/Downloads/db-tutorial/abasrpikfw4123--remote-db-ecpefky--mysql--main--dump.sql
Utilizzo degli strumenti ECE di Adobe Commerce
Se non si dispone dello strumento Adobe Commerce CLI, è possibile ssh nel progetto ed eseguire il comando ece vendor/bin/ece-tools db-dump:
Risposta di esempio:
ssh abasrpikfw4123-remote-db-ecpefky--mymagento@ssh.us-4.magento.cloud
__ __ _ ___ _ _
| \/ |__ _ __ _ ___ _ _| |_ ___ / __| |___ _ _ __| |
| |\/| / _` / _` / -_) ' \ _/ _ \ | (__| / _ \ || / _` |
|_| |_\__,_\__, \___|_||_\__\___/ \___|_\___/\_,_\__,_|
|___/
Welcome to Magento Cloud.
This is environment remote-db-ecpefky
of project abasrpikfw4123.
web@mymagento.0:~$ vendor/bin/ece-tools db-dump
The db-dump operation switches the site to maintenance mode, stops all active cron jobs and consumer queue processes, and disables cron jobs before starting the dump process.
Your site will not receive any traffic until the operation completes.
Do you wish to proceed with this process? (y/N)?y
[2024-02-13T19:01:45.130999+00:00] INFO: Starting backup.
[2024-02-13T19:01:45.155039+00:00] NOTICE: Enabling Maintenance mode
[2024-02-13T19:01:46.404427+00:00] INFO: Trying to kill running cron jobs and consumers processes
[2024-02-13T19:01:46.420149+00:00] INFO: Running Magento cron and consumers processes were not found.
[2024-02-13T19:01:46.420434+00:00] INFO: Waiting for lock on db dump.
[2024-02-13T19:01:46.420499+00:00] INFO: Start creation DB dump for main database...
[2024-02-13T19:01:50.697886+00:00] INFO: Finished DB dump for main database, it can be found here: /app/var/dump-main-1707850906.sql.gz
[2024-02-13T19:01:51.628328+00:00] NOTICE: Maintenance mode is disabled.
[2024-02-13T19:01:51.628419+00:00] INFO: Backup completed.
web@mymagento.0:~$ exit
logout
Connection to ssh.us-4.magento.cloud closed.
Utilizza SFTP o rsync per estrarre il dump del database nell'ambiente locale.
Nell'esempio seguente viene utilizzato rsync per estrarre il file nella cartella ~/Downloads/db-tutorial.
rsync -avrp -e ssh abasrpikfw4123-remote-db-ecpefky--mymagento@ssh.us-4.magento.cloud:/app/var/dump-main-1707850906.sql.gz ~/Downloads/db-tutorial
La finestra del terminale fornisce alcune informazioni. Ecco un esempio di output
rsync -avrp -e ssh abasrpikfw4123-remote-db-ecpefky--mymagento@ssh.us-4.magento.cloud:/app/var/dump-main-1707850906.sql.gz ~/Downloads/db-tutorial
receiving file list ... done
dump-main-1707850906.sql.gz
sent 38 bytes received 2691041 bytes 358810.53 bytes/sec
total size is 2690241 speedup is 1.00
Visualizza il contenuto del file per verificarne il corretto download.
ls -lah
total 29840
drwxr-xr-x 4 <username> staff 128B Feb 13 13:02 .
drwx------@ 103 <username> staff 3.2K Feb 13 12:52 ..
-rw-r--r-- 1 <username> staff 11M Feb 13 12:53 abasrpikfw4123--remote-db-ecpefky--mysql--main--dump.sql
-rw-r--r-- 1 <username> staff 2.6M Feb 13 13:01 dump-main-1707850906.sql.gz
Una volta che disponi dei dati, assicurati di rimuoverli o mascherarli. Il seguente script di esempio ti aiuterà a iniziare.
In questo esempio i dati del cliente vengono convertiti in stringhe casuali, ma vengono mantenuti tutti gli elementi. Questo esempio contiene alcune tabelle aggiuntive per dimostrare che i dati PII dei clienti si trovano nelle tabelle di terze parti e nelle tabelle principali. Esamina attentamente i dati in ogni tabella e maschera o rimuovi eventuali dati dei clienti.
In genere l’architetto o lo sviluppatore principale è l’unico responsabile del mascheramento e della bonifica delle immagini di database. Disporre di uno strumento sanitario dedicato riduce l'esposizione dei dati non elaborati, riducendo così la possibilità di violare le norme e i regolamenti di conformità.
SET FOREIGN_KEY_CHECKS=0;
UPDATE customer_entity SET email = REPLACE(email, SUBSTRING(email, LOCATE('@', email) +1), CONCAT(UUID(), '.com'));
UPDATE email_contact SET email = REPLACE(email, SUBSTRING(email, LOCATE('@', email) +1), CONCAT(UUID(), '.com'));
UPDATE sales_invoice_grid SET customer_email = 'customer@example.com', customer_name = 'Jack Smith';
UPDATE sales_order SET customer_email = 'customer@example.com', customer_firstname = 'Sally', customer_lastname = 'Smith', remote_ip = '127.0.0.1';
UPDATE sales_order_address SET region = 'Ohio', postcode = '12345-1234', lastname = 'Smith', street = '123 Main street', region_id = 44, city = 'Phoenix', telephone = NULL, firstname = 'Jane', company = NULL;
UPDATE sales_order_grid SET customer_email = 'customer@example.com', shipping_name = 'Jack', billing_name = 'Jack Smith', billing_address = '123 Main Street', shipping_address = '321 Pine Street', customer_name = 'Jane Smith';
UPDATE sales_shipment_grid SET customer_email = 'customer@example.com', customer_name = 'Jane Smith', billing_address = '123 Main street', billing_name = 'Jack Doe', shipping_name = 'Susie Smith';
UPDATE quote SET customer_email = 'customer@example.com', customer_firstname = 'Sally', customer_lastname = 'Jones', customer_dob = NULL, remote_ip = '127.0.0.1';
UPDATE quote_address SET email = 'customer@example.com', firstname = 'Jack', lastname = 'Smith', company = NULL, street = '123 Main st', city = 'AnyCity', region = 'Some State', region_id = 44, postcode = '12345-1234', telephone = NULL;
UPDATE magento_rma SET customer_custom_email = 'customer@example.com' WHERE customer_custom_email IS NOT NULL;
UPDATE customer_address_entity SET firstname = 'Jack', lastname = 'Smith', telephone = '909-555-1212', postcode = NULL, region = NULL, street = '123 Main street', city = 'Anycity', company = NULL;
UPDATE customer_grid_flat SET name = 'Jane Doe', email = 'customer@example.com', dob = NULL, gender = NULL, taxvat = NULL, shipping_full = '', billing_full = '', billing_firstname = 'Jack', billing_lastname = 'Smith', billing_telephone = NULL, billing_postcode = NULL, billing_country_id = NULL, billing_region = NULL, billing_street = '123 Main street', billing_city = 'Anycity', billing_fax = NULL, billing_vat_id = NULL, billing_company = NULL;
UPDATE sales_creditmemo_grid SET billing_name = 'Sally', billing_address = '123 Main Street', customer_name = 'Jack Smith', customer_email = 'customer@example.com';
UPDATE magento_rma_grid SET customer_name = 'Jack Smith';
UPDATE newsletter_subscriber SET subscriber_email = 'customer@example.com';
UPDATE core_config_data SET value = '' WHERE path = 'orderexport/general/serial';
UPDATE core_config_data SET value = '' WHERE path = 'productexport/general/serial';
UPDATE core_config_data SET value = '' WHERE path = 'trackingimport/general/serial';
UPDATE core_config_data SET value = '' WHERE path = 'stockimport/general/serial';
UPDATE core_config_data SET value = '' WHERE path = 'remarketing/onescript/merchant_id';
UPDATE core_config_data SET value = '' WHERE path = 'remarketing/onescript/merchant_id';
UPDATE core_config_data SET value = '' WHERE path = 'algoliasearch_credentials/credentials/application_id';
UPDATE core_config_data SET value = '' WHERE path = 'algoliasearch_credentials/credentials/search_only_api_key';
UPDATE core_config_data SET value = '' WHERE path = 'tax/avatax/production_account_number';
UPDATE core_config_data SET value = '' WHERE path = 'tax/avatax/production_license_key';
UPDATE core_config_data SET value = '' WHERE path = 'design/head/includes';
UPDATE core_config_data SET value = '' WHERE path = 'payment/braintree/merchant_id';
UPDATE core_config_data SET value = '' WHERE path = 'payment/braintree/public_key';
UPDATE core_config_data SET value = '' WHERE path = 'payment/braintree/private_key';
UPDATE core_config_data SET value = '' WHERE path = 'system/full_page_cache/fastly/fastly_service_id';
UPDATE core_config_data SET value = '' WHERE path = 'system/full_page_cache/fastly/fastly_api_key';
UPDATE core_config_data SET value = '' WHERE path = 'google/analytics/container_id';
UPDATE core_config_data SET value = '' WHERE path = 'analytics/general/token';
UPDATE vault_payment_token SET public_hash = UUID(), details = '{"type":"VI","maskedCC":"1111","expirationDate":"01\/2019"}';
TRUNCATE customer_log;
TRUNCATE customer_visitor;
TRUNCATE magento_logging_event;
TRUNCATE oauth_consumer;
TRUNCATE oauth_nonce;
TRUNCATE oauth_token;
TRUNCATE password_reset_request_event;
TRUNCATE acknowledgement;
TRUNCATE acknowledgement_report;
TRUNCATE avatax_log;
TRUNCATE avatax_queue;
TRUNCATE cron_schedule;
SET FOREIGN_KEY_CHECKS=1;
In alternativa, è possibile eliminare i record invece di mascherare le informazioni, riducendo anche le dimensioni del nuovo database. Una volta mascherati o rimossi i dati PII, questi possono essere forniti in modo sicuro a un compagno di squadra per l’utilizzo nel proprio ambiente locale.
Connessione DB remota a un progetto Adobe Commerce Cloud
Questo metodo consente la modifica e l’eliminazione accidentale di dati live. Usatelo con cautela. Se possibile, preferisci il backup del database e la revisione offline. A volte devi accedere ai dati direttamente su Adobe Commerce Cloud; quel flusso di lavoro comporta ancora dei rischi. Le interfacce grafiche non aggiungono richieste di conferma, pertanto è possibile modificare o rimuovere i dati per errore.
Una connessione al database remoto è comoda ma rischiosa. Puoi facilmente dimenticare di essere connesso alla produzione ed eliminare o modificare i dati. È possibile connettersi a una replica di sola lettura, ma le istruzioni SQL pesanti influiscono ancora sul sito. Adobe non consiglia connessioni remote di routine a database scrivibili. Utilizzare i passaggi seguenti solo quando si è consapevoli dei rischi.
Stabilire un tunnel SSH:
magento-cloud tunnel:open
Dopo aver selezionato il progetto e l’ambiente, viene restituito il comando utilizzato nelle impostazioni dell’interfaccia grafica mysql.
magento-cloud tunnel:open
Enter a number to choose a project:
[0] demo-ralbin (ral32nryq4123)
[1] adobe-commerce-demo (abc123zzkipexnqo)
[2] DX Tutorials - Commerce (abasrpikfw4123)
> 2
Enter a number to choose an environment:
Default: master
[0] master (type: production)
[1] remote-db (type: development)
> 1
SSH tunnel opened to database at: mysql://user:@127.0.0.1:30000/main
SSH tunnel opened to redis at: redis://127.0.0.1:30001
SSH tunnel opened to opensearch at: http://127.0.0.1:30002
SSH tunnel opened to rabbitmq at: amqp://guest:guest@127.0.0.1:30003
Logs are written to: /Users/<user>/.magento-cloud/tunnels.log
List tunnels with: magento-cloud tunnels
View tunnel details with: magento-cloud tunnel:info
Close tunnels with: magento-cloud tunnel:close
Save encoded tunnel details to the MAGENTO_CLOUD_RELATIONSHIPS variable using:
export MAGENTO_CLOUD_RELATIONSHIPS="$(magento-cloud tunnel:info --encode)"
Stabilire una connessione utilizzando un'interfaccia grafica MySQL utilizzando l'opzione di comando SSH tunnel opened to database at.
SSH tunnel opened to database at: mysql://user:@127.0.0.1:30000/main
Ora che disponi delle informazioni corrette, immetti questi valori nella console Cloud.
Puoi trovare il nome host e il nome utente SSH dalle credenziali cloud nella console Cloud.
Di seguito è riportato un esempio: ssh abasrpikfw4123-remote-db-ecpefky--mymagento@ssh.us-4.magento.cloud
Il nome host SSH è tutto dopo il segno @: ssh.us-4.magento.cloud in questo esempio.
Il nome utente SSH è tutto ciò che precede il simbolo @: abasrpikfw4123-remote-db-ecpefky--mymagento
Ricerca dei valori per la connessione al database
Per accedere direttamente al database MariaDB, utilizza SSH per accedere all’ambiente Cloud remoto e connettersi al database.
-
Utilizza SSH per accedere all’ambiente remoto.
code language-bash magento-cloud ssh -
Recuperare le credenziali di accesso MySQL dalle proprietà
databaseetypenella variabile $MAGENTO_CLOUD_RELATIONSHIPS.code language-bash echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_ppo
code language-bash php -r 'print_r(json_decode(base64_decode($_ENV["MAGENTO_CLOUD_RELATIONSHIPS"])));'Nella risposta, trovare le informazioni MySQL. Ad esempio:
code language-json "database" : [ { "password" : "", "rel" : "mysql", "hostname" : "nnnnnnnn.mysql.service._.magentosite.cloud", "service" : "mysql", "host" : "database.internal", "ip" : "###.###.###.###", "port" : 3306, "path" : "main", "cluster" : "projectid-integration-id", "query" : { "is_master" : true }, "type" : "mysql:10.3", "username" : "user", "scheme" : "mysql" } ],
Quindi utilizzare i valori di configurazione nell'interfaccia utente grafica MySQL. Nell'esempio seguente viene utilizzato MySQL Workbench, ma tutte le app che supportano le connessioni MySQL avranno campi simili.
Dopo aver configurato la connessione, puoi utilizzare un’interfaccia utente grafica MySQL per eseguire query su un progetto Adobe Commerce Cloud remoto.
Connessione diretta al database del progetto cloud per eseguire SQL
Il metodo seguente utilizza la CLI magento-cloud per connettersi direttamente al database MySQL ed eseguire SQL per eseguire query più veloci. Se hai bisogno di una copia di questo database, utilizza uno dei metodi alternativi per creare un'immagine del database.
magento-cloud db:sql
Enter a number to choose a project:
[0] demo-ralbin (ral32nryq4123)
[1] adobe-commerce-demo (abc123zzkipexnqo)
[2] DX Tutorials - Commerce (abasrpikfw4123)
> 2
Enter a number to choose an environment:
Default: master
[0] master (type: production)
[1] remote-db (type: development)
> 1
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 273454
Server version: 10.6.15-MariaDB-1:10.6.15+maria~deb10-log mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Ad esempio, è possibile trovare tutti i record della tabella core_config_data che contengono la parola secure come parte della colonna path:
MariaDB [main]> SELECT * FROM core_config_data WHERE path LIKE '%secure%' \G;
*************************** 1. row ***************************
config_id: 5
scope: default
scope_id: 0
path: web/unsecure/base_url
value: http://remote-db-ecpefky-abasrpikfw4123.us-4.magentosite.cloud/
updated_at: 2024-02-02 18:03:17
*************************** 2. row ***************************
config_id: 6
scope: default
scope_id: 0
path: web/secure/base_url
value: https://remote-db-ecpefky-abasrpikfw4123.us-4.magentosite.cloud/
updated_at: 2024-02-02 18:03:17
*************************** 3. row ***************************
config_id: 8
scope: default
scope_id: 0
path: web/secure/use_in_adminhtml
value: 1
updated_at: 2023-04-26 19:43:58
3 rows in set (0.001 sec)
ERROR: No query specified
MariaDB [main]>