Yii Framework Forum: [Solucionado]Salvar La Bd Y Al Restaurar Solo Hacerlo Para Parte De La Bd - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[Solucionado]Salvar La Bd Y Al Restaurar Solo Hacerlo Para Parte De La Bd Aadicionar los registros a la BD Rate Topic: -----

#1 User is offline   rafaelrosales 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 02-October 13

Posted 11 April 2014 - 12:14 PM

Hola a todos, tengo un problemita y necesito me ayuden a resolver, gracias por adelantado de las ayudas que me puedan proporcionar.
En estos momentos estoy haciendo salvas de la BD con el backup_1.3 y me funciona bien, o sea, salvo la informacion y restauro desde ese fichero y me lo hace perfectamente el problema ahora es que no necesito restaurar, sino lo que quiero es que me inserte los nuevos registros a la BD, o sea, tengo el sistema fracionado en varios lugares con su BD en cada lugar o (Punto de Venta) y quiero al final del dia consolidar la informacion de cada Punto de venta en el servidor central, se que lo ideal seria montar el sistema en un solo servidor y que todos los puntos de ventas se conecten a ese servidor, pero por problemas de conectividad aqui no se puede hacer, por lo que necesito es que cada Punto de Venta haga la salva y al final del dia envie ese fichero por correo y en el servidor con ese fichero me inserte esa informacion a la BD del servidor, manteniendo la que tenia, aclaro las BD son exactamente iguales.
Aclaro:
Tengo un servidor con el sistema y su BD con todas las tablas, tengo ademas varios Puntos de ventas con el mismo sistema y la misma BD, y quiero al final del dia hacer una salva de las operaciones de ese Punto de Venta y en el servidor central coger esa salva y hacer una operacion (no la voy a llamar restaura) que me inserte los articulos de las tablas de la BD a las tablas de la BD del servidor central.
Tambien podria ser que para ese Punto de Venta me restaure, no para los demas.
Me indican si con el backup lo podria hacer o me sugieren otro. Tengo mi BD en MySql
Gracias por adelantado.
0

#2 User is offline   rafaelrosales 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 02-October 13

Posted 17 April 2014 - 01:45 PM

View Postrafaelrosales, on 11 April 2014 - 12:14 PM, said:

Hola a todos, tengo un problemita y necesito me ayuden a resolver, gracias por adelantado de las ayudas que me puedan proporcionar.
En estos momentos estoy haciendo salvas de la BD con el backup_1.3 y me funciona bien, o sea, salvo la informacion y restauro desde ese fichero y me lo hace perfectamente el problema ahora es que no necesito restaurar, sino lo que quiero es que me inserte los nuevos registros a la BD, o sea, tengo el sistema fracionado en varios lugares con su BD en cada lugar o (Punto de Venta) y quiero al final del dia consolidar la informacion de cada Punto de venta en el servidor central, se que lo ideal seria montar el sistema en un solo servidor y que todos los puntos de ventas se conecten a ese servidor, pero por problemas de conectividad aqui no se puede hacer, por lo que necesito es que cada Punto de Venta haga la salva y al final del dia envie ese fichero por correo y en el servidor con ese fichero me inserte esa informacion a la BD del servidor, manteniendo la que tenia, aclaro las BD son exactamente iguales.
Aclaro:
Tengo un servidor con el sistema y su BD con todas las tablas, tengo ademas varios Puntos de ventas con el mismo sistema y la misma BD, y quiero al final del dia hacer una salva de las operaciones de ese Punto de Venta y en el servidor central coger esa salva y hacer una operacion (no la voy a llamar restaura) que me inserte los articulos de las tablas de la BD a las tablas de la BD del servidor central.
Tambien podria ser que para ese Punto de Venta me restaure, no para los demas.
Me indican si con el backup lo podria hacer o me sugieren otro. Tengo mi BD en MySql
Gracias por adelantado.

Hola aclaro lo que quiero, tengo un sistema con la misma base de datos en varios lugares (UEB) y trabajan independientes, no hay conexion entre las UEB, lo que quiero es hacer una salva en cada UEB y con esa salva actualizar los datos de esas UEB en mi servidor que tambien tengo la misma base de datos, o sea en el servidor tengo todas las UEB y cuando actualice con la base de datos de una UEB en especifico me actualice esa UEB, ejemplo si en una tabla tenia 10 registros de esa UEB, al actualizar (o restaurar) me agregue los registros nuevos, manteniendo los que ya tenia.
Cualquier duda me preguntan, pero necesito resolver, dando las gracias por adelantado.
0

#3 User is offline   rahif 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 193
  • Joined: 11-July 13

Posted 23 April 2014 - 04:17 PM

Este tema no es sencillo, dependiendo de las tablas puede ser muy complicado y de cuantas hay que sincronizar un trabajo pesado.

Yo no soy un experto así que solo es una opinión.
Supongamos 1 servidor y 4 puntos de venta
Para mí todos deben tener un backup, pudiendo restaurar los datos, y no debe borrarse nada nunca ni del servidor ni de los locales.
El proceso complejo lo tienes al pasar los datos al servidor, es una sincronización, no es una restauración.
Imagina una tabla pedido : (id,id_articulo,.....) --> sería una tabla normal pero en este caso necesitarás campos extra para poder manejar las sincronizaciones, por ejemplo.

pedido : (id,numPV,id_original,id_articulo,.....) --> hay que pensarlo pero podría ser algo así.
numPV es un numero que identificaría al punto de venta, cada uno de ellos tiene un número y así sabrás en el servidor de quien es el pedido.
id,id_original --> son lo mismo, tienen el mismo valor (hasta que se sincronizan las BBDD)

imagina el punto de venta 1 tendría algo así para un pedido de id_articulo=5,id_articulo=86,id_articulo=15,id_articulo=54
pedido : (1,1,1,5,...),(2,1,2,86,...),(3,1,3,15,...),(4,1,4,54,...)

Ahora al sincronizar los datos lees el 1º pedido (1,1,1,5,...) e introduces en la BBDD del servidor el registro
(numPV,id_original,id_articulo,.....) = (1,1,5,...) con lo que el campo id aquí es distinto, ya que id es autoincremental pero se mantiene una copia del id que hay en el punto de venta nº 1 con el campo id_original.
(numPV,id_original,id_articulo,.....) = (1,2,86,...)
(numPV,id_original,id_articulo,.....) = (1,3,15,...)
(numPV,id_original,id_articulo,.....) = (1,4,54,...)

La sincronización no es un proceso rápido, debes leer registro a registro quiza también te interese comprobar si el registro ya existe en BBDD, ralentizará algo más el proceso, pero aquí lo importante es que no haya ningún error.

De esta forma es pesado, pero se podría recuperar la información completa del servidor a partir de los puntos de venta y en teoría al revés aunque si hay más tablas esto puede ser una locura.

Piénsalo bien puede complicarse y mucho, esta es una forma pero puede que no se adapte bien a lo que quieres o que haya otras formas más simples o eficientes para el caso que manejas.
Un saludo,
0

#4 User is offline   rafaelrosales 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 02-October 13

Posted 24 April 2014 - 12:45 PM

View Postrahif, on 23 April 2014 - 04:17 PM, said:

Este tema no es sencillo, dependiendo de las tablas puede ser muy complicado y de cuantas hay que sincronizar un trabajo pesado.

Yo no soy un experto así que solo es una opinión.
Supongamos 1 servidor y 4 puntos de venta
Para mí todos deben tener un backup, pudiendo restaurar los datos, y no debe borrarse nada nunca ni del servidor ni de los locales.
El proceso complejo lo tienes al pasar los datos al servidor, es una sincronización, no es una restauración.
Imagina una tabla pedido : (id,id_articulo,.....) --> sería una tabla normal pero en este caso necesitarás campos extra para poder manejar las sincronizaciones, por ejemplo.

pedido : (id,numPV,id_original,id_articulo,.....) --> hay que pensarlo pero podría ser algo así.
numPV es un numero que identificaría al punto de venta, cada uno de ellos tiene un número y así sabrás en el servidor de quien es el pedido.
id,id_original --> son lo mismo, tienen el mismo valor (hasta que se sincronizan las BBDD)

imagina el punto de venta 1 tendría algo así para un pedido de id_articulo=5,id_articulo=86,id_articulo=15,id_articulo=54
pedido : (1,1,1,5,...),(2,1,2,86,...),(3,1,3,15,...),(4,1,4,54,...)

Ahora al sincronizar los datos lees el 1º pedido (1,1,1,5,...) e introduces en la BBDD del servidor el registro
(numPV,id_original,id_articulo,.....) = (1,1,5,...) con lo que el campo id aquí es distinto, ya que id es autoincremental pero se mantiene una copia del id que hay en el punto de venta nº 1 con el campo id_original.
(numPV,id_original,id_articulo,.....) = (1,2,86,...)
(numPV,id_original,id_articulo,.....) = (1,3,15,...)
(numPV,id_original,id_articulo,.....) = (1,4,54,...)

La sincronización no es un proceso rápido, debes leer registro a registro quiza también te interese comprobar si el registro ya existe en BBDD, ralentizará algo más el proceso, pero aquí lo importante es que no haya ningún error.

De esta forma es pesado, pero se podría recuperar la información completa del servidor a partir de los puntos de venta y en teoría al revés aunque si hay más tablas esto puede ser una locura.

Piénsalo bien puede complicarse y mucho, esta es una forma pero puede que no se adapte bien a lo que quieres o que haya otras formas más simples o eficientes para el caso que manejas.
Un saludo,

ok amigo la voy a pensar, pero se ve eque es complicado.
0

#5 User is offline   rafaelrosales 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 02-October 13

Posted 28 April 2014 - 08:07 AM

Para el problema en cuestion hice un una forma y un Controlador para Importar datos y Exportar Datos, hasta ahora creo me resuelve el problema de todas formas necesitos que los expertos me lo revisen y me den sus apreciaciones:
Aqui esta el controlador: SalvasController
<?php

class SalvasController extends Controller
{
	/**
     * @return array action filters
     */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
			'postOnly + delete', // we only allow deletion via POST request
		);
	}

	/**
     * Specifies the access control rules.
     * This method is used by the 'accessControl' filter.
     * @return array access control rules
     */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' and 'create' actions
				'actions'=>array('index','exportar','importar','salvas'),
				'users'=>array('@'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),	
		);
	}

	public function actionIndex()
	{	
		$this->render('index');
	}	
	public function actionSalvas()
	{
  	$this->render('salvas');
	}
	public function actionExportar()
	{	
        	$filename = 'salva.sql'; 
        	system(Yii::app()->params['mysqlDir']."mysqldump --user=root --password= --no-create-db --no-create-info --extended-insert --insert-ignore dbfacturacionbeb datosent datossal detallesent detallesfact docubancarios facturas firmantes prefacturas detallespre submayorprod > $filename");
        	
        	header("Content-type: text/plain");
        	header("Content-disposition: attachment; filename=Salva_".date("Y_m_d_h_i_s_a").".sql");

        	readfile('salva.sql');
      	
        	Yii::app()->end();               		
	}   	
            	
	public function actionImportar()
	{	
        	foreach($_FILES['files']['name'] as $key=>$filename){            	
                	if(empty($filename))
                	{               		
                    	echo "Seleccione salva.";
				                  		
                    	$this->render('salvas');
                 		Yii::app()->end();
                	}                    	
                	move_uploaded_file($_FILES['files']['tmp_name'][$key],$filename);  
                                               		
                	$sqlFile = $filename;
                	$restore = Yii::app()->params['mysqlDir']."mysql --password=  --user=root dbfacturacionbeb < $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('salvas');
        	}                	
        	
	}
   
}

y la forma: Salvas
<div class="form">

<?php echo CHtml::form($this->createUrl('importar'),'post',array('enctype'=>'multipart/form-data')); ?>

<div style="text-align:center">
	<h1>Exportar / Importar</h1>
</div>

<table>
	<tr>
		<td style="width:45%; text-align:center">	
			<fieldset>

				<legend><h4>Exportar Datos</h4></legend>                            	
				<div>
					<b>Se genera un archivo para exportar los datos de tablas especificas</b>        	
				</div>
				<br/>
				<div>
					<?php echo CHtml::submitButton('Exportar', array ( 'submit'=>array('salvas/exportar')));?>
				</div> 

			</fieldset>
		</td>
		<td/>	
		<td style="width:45%; text-align:center">
			<fieldset>

				<legend>
				<h4>Importar Datos </h4>
				</legend>

				<div>
					<?php 
						$this->widget('CMultiFileUpload',array(
								'name'=>'files',
								'accept'=>'sql',
								'max'=>1,
								'remove'=>Yii::t('ui',CHtml::image(Yii::app()->request->baseUrl."/images/drop-add.gif")),
								'denied'=>'Formato del fichero incorrecto. Seleccione un fichero de salva correcto.',
								'duplicate'=>'El fichero ya se encuentra en la lista.',
								'htmlOptions'=>array('size'=>30),
						));				
					?>
				</div>
				<br/>
				<div>
						<?php echo CHtml::submitButton('Importar', array ( 'submit'=>array('salvas/importar')));?>
				</div> 
					  	
			</fieldset>	
		</td>		
	</tr> 
</table>  	

<?php echo CHtml::endForm(); ?>

</div>

Aqui en el contralador como ven hago las funciones Exportar e Importar. donde cada cual hace lo referenciado, se utiliza el fichero mysqldump para estos fines, donde:
system(Yii::app()->params['mysqlDir']."mysqldump --user=root --password= --no-create-db --no-create-info --extended-insert --insert-ignore dbfacturacionbeb datosent datossal detallesent detallesfact docubancarios facturas firmantes prefacturas detallespre submayorprod > $filename");

pongo la BD y las tablas a exportar e importar en la BBDD.
acepto sugerencias y gracias por todo
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users