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-cloud ed 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.

Console Adobe Commerce 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.

  1. Utilizza SSH per accedere all’ambiente remoto.

    code language-bash
    magento-cloud ssh
    
  2. Recuperare le credenziali di accesso MySQL dalle proprietà database e type nella variabile $MAGENTO_CLOUD_RELATIONSHIPS.

    code language-bash
    echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
    

    o

    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.

Esempio di connessione a MySQL Workbench Esempio di connessione TablePlus

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]>

Risorse aggiuntive

recommendation-more-help
3a5f7e19-f383-4af8-8983-d01154c1402f