Προς το περιεχόμενο

mysql


Μετάβαση στην απάντηση Απαντήθηκε από PC_MAGAS,

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα προσπαθώ να σχεδιάσω μια βάση αρχαιολογικών δεδομένων σε mysql για μια εργασία. Δεν προέρχομαι από κάποια σχολή πληροφορικής αλλά διαβάζω εδώ και αρκετούς μήνες.  Θα ήθελα αν μπορεί κάποιος να μού πει αν είναι δυνατόν η βάση μου να συνδέεται με μια άλλη βάση δεδομένων και πως μπορώ να το κάνω..αν είναι εύκολο αρκετά αναλυτικά.

Ευχαριστώ πολύ

Δημοσ. (επεξεργασμένο)
1 ώρα πριν, eleana_3 είπε

Καλησπέρα προσπαθώ να σχεδιάσω μια βάση αρχαιολογικών δεδομένων σε mysql για μια εργασία. Δεν προέρχομαι από κάποια σχολή πληροφορικής αλλά διαβάζω εδώ και αρκετούς μήνες.  Θα ήθελα αν μπορεί κάποιος να μού πει αν είναι δυνατόν η βάση μου να συνδέεται με μια άλλη βάση δεδομένων και πως μπορώ να το κάνω..αν είναι εύκολο αρκετά αναλυτικά.

Ευχαριστώ πολύ

Αν η αλλη βαση σου ειναι σχεσιακή μπορείς με foreighn data wrapper:
https://www.enterprisedb.com/docs/mysql_data_adapter/latest/configuring/

 

Παρά ταύτα θα πρότεινα μονό και μονό να τα αξιοποιείς για να μεταφέρεις δεδομένα από απομακρυσμένες βάσεις στην βάση σου. Κατά την άποψη μου έχω άσχημες εμπειρίες με foreighn data wrapper σε σημείο να είμαι σε εμβρυακή στάση και να κλαίω.

 

Θα πρότεινα να έκανες cron script και να μεταφέρεις από τη μια βάση στην άλλη.

Μπρορει να ειναι και απλα 2 command line εντολές που το result της μιας εντολής γινετε pipe στο input της άλλης. Στην μια θα γίνετε select και στην άλλη insert.

 

Για αρxή πιστεύω ειναι ποιο απλο να το κανεις σε σκριπτάκι:

Σε python το κάνεις (εβαλα το ChatGPT να γράψει τον κώδικα):

import mysql.connector

# Connect to the source MySQL database
source_conn = mysql.connector.connect(
    host='source_host',
    user='source_user',
    password='source_password',
    database='source_database'
)

# Connect to the destination MySQL database
destination_conn = mysql.connector.connect(
    host='destination_host',
    user='destination_user',
    password='destination_password',
    database='destination_database'
)

# Create cursor objects for both databases
source_cursor = source_conn.cursor()
destination_cursor = destination_conn.cursor()

# Execute a SELECT query to fetch records from the source table
source_cursor.execute('SELECT * FROM source_table')  # Replace 'source_table' with your source table name

# Fetch the first record from the source table
record = source_cursor.fetchone()

# Iterate through the records and insert them into the destination table
while record is not None:
    # Assuming the destination table has the same structure as the source table
    destination_cursor.execute('INSERT INTO destination_table VALUES (%s, %s, %s)', record)
    # Replace 'destination_table' with your destination table name and adjust the number of placeholders based on your table structure

    # Fetch the next record
    record = source_cursor.fetchone()

# Commit the changes to the destination database
destination_conn.commit()

# Close the database connections
source_conn.close()
destination_conn.close()

Η και σε PHP (εβαλα το ChatGPT να γράψει τον κώδικα):
 

<?php
// Source database connection
$source_host = 'source_host';
$source_db = 'source_database';
$source_user = 'source_user';
$source_password = 'source_password';

$source_dsn = "mysql:host=$source_host;dbname=$source_db;charset=utf8mb4";

try {
    $source_conn = new PDO($source_dsn, $source_user, $source_password);
    $source_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Connection failed: " . $e->getMessage());
}

// Destination database connection
$destination_host = 'destination_host';
$destination_db = 'destination_database';
$destination_user = 'destination_user';
$destination_password = 'destination_password';

$destination_dsn = "mysql:host=$destination_host;dbname=$destination_db;charset=utf8mb4";

try {
    $destination_conn = new PDO($destination_dsn, $destination_user, $destination_password);
    $destination_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Connection failed: " . $e->getMessage());
}

// Query to fetch records from the source table
$source_query = 'SELECT * FROM source_table'; // Replace 'source_table' with your source table name

// Prepare and execute the source query
$source_stmt = $source_conn->query($source_query);

// Iterate through the records and insert them into the destination table
while ($record = $source_stmt->fetch(PDO::FETCH_ASSOC)) {
    // Assuming the destination table has the same structure as the source table
    $columns = implode(", ", array_keys($record));
    $values = "'" . implode("', '", $record) . "'";
    $destination_query = "INSERT INTO destination_table ($columns) VALUES ($values)";
    // Replace 'destination_table' with your destination table name

    // Execute the destination query
    $destination_conn->exec($destination_query);
}

// Close the database connections
$source_conn = null;
$destination_conn = null;
?>


Σε περίπτωση που τρεχεις php μπορεις να την τρέξεις μέσω command line:
 

php script.php

Όπου το scrpt.php είναι το αρχείο που έχει τον κώδικα για να μεταφέρεις τα δεδομένα από τη μια βάση στην άλλη. ΠΡΟΣΟΧΗ MHN κάνεις fetchAll σε αυτό το σενάριο μπορεί να μπουκώσει η μνήμη. Καλύτερα 1-1. Ακόμα αυτό μην το κάνεις να τρέχει απευθείας από WEB.

 

Αλλα βάλτο cron η να θες να το τρέχεις μέσω web θα πρέπει να το σηκώσεις σαν background process:

<?php

shell_exec("php script.php&");

Δώσε βάση στο & που ειναι στο τέλος της εντολής αυτο είναι που κανει να τρέχει την εντολή στο background.

 

For the record βάζω και την στιχομυθία στο ChatGPT:
https://chat.openai.com/share/91607553-1e01-44b4-9053-104e41be183d

Επεξ/σία από PC_MAGAS
  • Like 1
Δημοσ.

Ευχαριστώ για την απάντηση.

Αυτό που θέλω να κάνω είναι ότι επειδή η βάση μου θα έχει κεραμική και θα πρέπει να φτιάξω πίνακες (πολλούς) για δεδομένα χημικών αναλύσεων (αναλυτικά τα χημικά στοιχεία, ποσοστά, μέθοδοι κτλ. ) που θα γίνουν μελλοντικά και επειδή το εργαστήριο που θα κάνει τις αναλύσεις έχει έτοιμη δική του βάση σε mysql μπορώ με κάποιο τρόπο να αποφύγω τη δημιουργία όλων αυτών των πινάκων και να συνδέεται κάποιος που θέλει να δει τα δεδομένα από τη δική μου βάση στη βάση του εργαστηρίου;

Δημοσ.

Με κάποιο γλώσσα προγραμματισμού για το web μπορείς να εμφανίζεις δυναμικούς πίνακες. Το sql είναι για τα δεδομένα μόνο, δεν είναι excel.

  • Like 1
  • Λύση
Δημοσ.
25 λεπτά πριν, eleana_3 είπε

Ευχαριστώ για την απάντηση.

Αυτό που θέλω να κάνω είναι ότι επειδή η βάση μου θα έχει κεραμική και θα πρέπει να φτιάξω πίνακες (πολλούς) για δεδομένα χημικών αναλύσεων (αναλυτικά τα χημικά στοιχεία, ποσοστά, μέθοδοι κτλ. ) που θα γίνουν μελλοντικά και επειδή το εργαστήριο που θα κάνει τις αναλύσεις έχει έτοιμη δική του βάση σε mysql μπορώ με κάποιο τρόπο να αποφύγω τη δημιουργία όλων αυτών των πινάκων και να συνδέεται κάποιος που θέλει να δει τα δεδομένα από τη δική μου βάση στη βάση του εργαστηρίου;

Μπορείς να συνδέεστε σε 2 βάσεις. Να αντιγράφεις όποια δεδομένα σε δικούς σου πίνακες και να κάνεις επεξεργασία. Εναλλακτικά μπορείς να γράφεις στην βάση του εργαστηρίου. Δεν είναι ανάγκη να είναι 1-1 η αντιστοιχία στην βάση σου με την βάση τους.

 

Σαφώς βέβαια θα πρέπει να κατασταλάξεις σε σενάρια χρήσης για να δεις ποιος θα επικοινωνεί με τι.

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...