Trabajar BD Remota y BD Local iguales ambas (mysql)

Hola a todos necesito trabajar en dos BD iguales una local y una remota en un hosting, ya que tengo un sistema que trabaja local pero tambien se lee en un hosting remoto, aclaro tambien puedo hacer operaciones en el remoto y pasarla para el local, lo que quiero es que la BD del hosting remoto se actualice desde la BD local, o sea, todas las operaciones que haga en local se agreguen en el hosting o viceversa, las operaciones que haga en remoto se agreguen en local, tengo la idea pero no se como hacerlo, por ejemplo pienso:
Hacer una sincrocizacion de las BD, luego hacer un cron para hacerlo automatico, pero no tengo idea de como se hace y no tengo suficientes permiso en phpMyadmin del hosting, solo actualizar la BD, trabajar con las tablas y exportar e importar. Necesito sugerencias o si es posible algo como ejemplo, gracias por adelantado.

1 Like

Te recomiendo hacer un script que cada vez que se ejecute. Elimine completamente el contenido de la db remota y se actualice con la salva de la local.

Para obtener el .sql de la local te recomiendo rodzadra/yii-dump-db

Gracias Gabriel ya lo pense, pero ETECSA no permite ejecutar script en su servidor, ademas no tengo idea como se hace, nunca he echo esto

Ya. Ahora no tengo tiempo para entrar en detalles.Luego de las 12. Pero el mecanismo para saltarse eso con ETECSA es el siguiente.

  1. en lo que tienes en etecsa pones un endpoint (POST) con CORS (para tu dominio internacional). Este action es el que hará la “tarea programada”
  2. en el host internacional, es que configuras el CRON. este lo que hará será hacer una petición POST al endpoint definido en el paso 1.

O sea, el hosting internacional es el que ejecuta el trigger, y llama por HTTP, al script en el hosting nacional.

Lo feo (hablando en terminos de Yii) es que no puedes hacer el script como un comando de la consola de Yii, sino como un action normal. Pero… si extraes ese action como una clase independiente, luego lo podrías invocar en ambos contextos.

Recordarmelo luego de las 12 para mas detalles.

Gracias, ayudame con eso

1 Like

Hola y saludos, no logro descargar la extension yii-dump-db, ya no esta disponible, pueden aconsejarme algo, les voy a mostrar algo que hice hace un tiempo para actualizar dos BD en windows:

 public function actionExportar() {

        $filename = 'salvas.sql';

        system(Yii::app()->params['mysqlDir'] . "mysqldump --user=usuario--password=clave --no-create-db --no-create-info --extended-insert --insert-ignore base pongo las tablas a exportar > $filename");
        
        header("Content-type: text/plain");

        header("Content-disposition: attachment; filename=Salva_exportada_" . date("Y_m_d_a") . ".sql");

        readfile('salvas.sql');

        Yii::app()->end();
    }

    public function actionImportar() {
        $almacen = $_POST['entidad']; {
            Yii::app()->db->beginTransaction();
            $query = "CREATE TABLE IF NOT EXISTS tabla a crear, si lo necesito (
                id INT NOT NULL AUTO_INCREMENT,
                fecha date,
                PRIMARY KEY (id) )
                ENGINE = InnoDB";
            Yii::app()->db->createCommand($query)->execute();
        }

        foreach ($_FILES['files']['name'] as $key => $filename) {
            if (empty($filename)) {
                echo "Seleccione salva.";
                $this->render('salvasim');
                Yii::app()->end();
            }
            move_uploaded_file($_FILES['files']['tmp_name'][$key], $filename);

            $sqlFile = $filename;

            $restore = Yii::app()->params['mysqlDir'] . "mysql --password=clave --user=usuario base< $sqlFile";
            system($restore, $return);

            if ($return) {
                echo "Ocurrió un error al intentar cargar la salva.";
            } else {
                echo "Los datos fueron importados satisfactoriamente.";
                unlink($filename);
            }
            $this->render('salvasim');
        }
    }

esto es para windows lo que hace es exportar las tablas seleccionada en una bd e importarla en la otra bd, en linux no trabaja me da error en:

$restore = Yii::app()->params['mysqlDir'] . "mysql --password=clave --user=usuario base< $sqlFile";
            system($restore, $return);

aqui en el fichero del hosting, pongo la clave y el usuario del hosting que no son los mismos que en local, pero no se cual es el params[‘mysqlDir’] , ya que me da error aqui system($restore, $return); con la variable return. necesito ver si puedo trabajar aqui, o hay otra sugerencia.

El script que uso https://gist.github.com/glpzzz/90433c21a345b6965931177c78412df3