Fazendo Backup no Banco de Dados MYSQL

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

Avatar do usuário
09466261000176
Usuário Nível 1
Usuário Nível 1
Mensagens: 39
Registrado em: 19 Mar 2014 15:50
Localização: lorena sp

Fazendo Backup no Banco de Dados MYSQL

Mensagem por 09466261000176 »

Olá Pessoal. Estou querendo fazer backup do meu banco. Quero embutir em meu aplicativo o comando sql para tal evento. Comno fazer isso por dentro de meu programa? Usei este comando mas ele não funcionou.
mysqldump -u root -ppadrao --all-databases > backup_banco.sql
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Fazendo Backup no Banco de Dados MYSQL

Mensagem por Kapiaba »

Avatar do usuário
09466261000176
Usuário Nível 1
Usuário Nível 1
Mensagens: 39
Registrado em: 19 Mar 2014 15:50
Localização: lorena sp

Fazendo Backup no Banco de Dados MYSQL

Mensagem por 09466261000176 »

Não. Seria algo assim:

No fonte...

cQuery:="comando sql para executar a copia do banco"
sql execute ( cQuery )

Outra coisa estou usando WINDOWS 8.0 não LINUX
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Fazendo Backup no Banco de Dados MYSQL

Mensagem por Kapiaba »

Avatar do usuário
09466261000176
Usuário Nível 1
Usuário Nível 1
Mensagens: 39
Registrado em: 19 Mar 2014 15:50
Localização: lorena sp

Fazendo Backup no Banco de Dados MYSQL

Mensagem por 09466261000176 »

Usar o MYSQLDUMP tudo bem consigo, porém o que quero é embutir dento de meu fonte comandos SQL para realizar esta operação. Não quero fazer isso por um .BAT nem direto na console do MYSQL. Fica mais elegante o próprio programa executar.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Fazendo Backup no Banco de Dados MYSQL

Mensagem por alxsts »

Olá!

Recentemente instalei o MySQL, seguindo um excelente tutorial postado pelo Toledo mas, ainda não iniciei meus testes com ele.

Tenho alguns testes feitos com SQL Server com ADO, onde crio um banco de dados e algumas tabelas no mesmo, que compartilho abaixo. Creio que eja possível adaptar isto para MySQL e acrescentar a rotina de backup.

Código: Selecionar todos

#include "ado.ch"
#include "box.ch"
#include "hbcompat.ch"

REQUEST HB_CODEPAGE_PTISO

STATIC oCn As Object

//------------------------------------------------------------------------------

INIT PROCEDURE AppInit()

   LOCAL oErr As Object
   LOCAL cCnString As Character

   Altd()
   
   RELEASE GetList
   HB_CDPSELECT("PTISO")

   Set( _SET_DATEFORMAT, "dd/mm/yyyy" )
   SetMode(50,150)
   SetBlink( .F. )
   SetColor( "W+/N, N/W*" )

   CLS

   DispBox( 0,0,2, MaxCol(), Space(9), "W+/RB"  )
   DispBox( 3,0,MaxRow() - 1, MaxCol() * .25, Space(9), "N/N"  )
   DispBox( 3,(MaxCol() * .25) + 1,MaxRow(), MaxCol() , Space(9), "N/BG+"  )
   DispBox( MaxRow(), 0, MaxRow(), MaxCol(), Space(9), "N/W"  )
   DispOutAt( 1,0, PadC("Testando Harbour + ADO + SQL Server",MaxCol()), "W+/RB" )


   Try
      cCnString := "Provider=SQLNCLI10;Server=(Local);Database=Harbour;Uid=sa;Pwd=xyz;"

      oCn := win_OleCreateObject("ADODB.Connection")

      oCn:ConnectionString := cCnString
      oCn:CursorLocation := adUseClient
      oCn:Mode := adModeReadWrite

   Catch oErr
      Alert( "Não foi possível conectar ao banco de dados.;Erro: " + oErr:description, { "  Fechar  " } )
      __Quit()
   Finally
   
   End
   
RETURN
//------------------------------------------------------------------------------

FUNCTION AppMain()

   LOCAL oRs As Object
   LOCAL oErr As Object
   LOCAL cSql As Character

   Altd()

   Try
      // Cria novo banco de dados, se não existir
      oRs := ExecuteSQL( "SELECT IsNull( db_id('harbour'),0 ) As dbID" )

      If ! oRs:Eof()
         If oRs:fields("dbID"):value == 0
            TEXT INTO cSql
               CREATE DATABASE Harbour
               ON
               ( NAME = Harbour_dat,
                   FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Harbour.mdf',
                   SIZE = 10,
                   MAXSIZE = 50,
                   FILEGROWTH = 5 )
               LOG ON
               ( NAME = Harbour_log,
                   FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Harbour.ldf',
                   SIZE = 5MB,
                   MAXSIZE = 25MB,
                   FILEGROWTH = 5MB ) ;
            ENDTEXT

            oCn:Open()

            oCn:Execute( cSql )

            Alert( "Banco de dados 'Harbour' criado com sucesso.",, "W+/B" )
         Else
            Alert( "Banco de dados 'Harbour' já existe e não pode ser criado novamente.",, "W+/B" )
         Endif
      Else
         Alert( "RS vazio" )
      Endif
      
      TablesGenerator( ScriptGenerator() )

      Alert( "O banco de dados da aplicação foi criado com sucesso: 'Harbour'.",, "W+/B" )

   Catch oErr
      If oErr != NIL
         Alert(oErr:description)
      Endif
      Alert( "Ocorreram erros.;O banco de dados da aplicação não foi criado com sucesso: 'Harbour'.",, "W+/B" )
   Finally
      If oRs != NIL .And. oRs:state() == adStateOpen
         oRs:Close()
      Endif

      If oCn:state() == adStateOpen
         oCn:Close()
      Endif

      oRs := NIL
      oCn := NIL
   End

RETURN
//------------------------------------------------------------------------------

EXIT PROCEDURE AppExit()

   HB_GCAll( .T. )
   CLS

RETURN

//------------------------------------------------------------------------------

STATIC FUNCTION ExecuteSql( cSql )

   LOCAL oRs As Object
   LOCAL oErr As Object
   LOCAL cCnString As Character

   Try
      oRs := win_OleCreateObject("ADODB.RecordSet")
   
      With Object oRs

         :activeConnection := oCn:connectionString

         :cursorLocation := adUseClient
         :cursorType := adOpenDynamic

         :lockType := adLockOptimistic

         :maxRecords := 100000
         :cacheSize := 100
         :source := cSql

         :open()
      End With
   Catch oErr
      Throw( oErr )
   End
   
   RETURN oRs
//------------------------------------------------------------------------------

STATIC FUNCTION TablesGenerator( aScripts )

   LOCAL cSql As Character
   LOCAL lRet As Logical

   lRet := .F.
      
   Try
      oCn:Open()

      For Each cSql In aScripts
         oCn:Execute( cSql )
      Next

      lRet := .T.
      
   Catch oErr
      Throw( oErr )
   Finally
      If oCn:state() = adStateOpen
         oCn:Close()
      Endif
   End

RETURN lRet
//------------------------------------------------------------------------------

STATIC FUNCTION ScriptGenerator()

   LOCAL cSql As Character
   LOCAL aRet As Array

   aRet := {}

   TEXT INTO cSql
      USE [Harbour]

      /****** Object:  Table [dbo].[tbAddressType]    Script Date: 09/04/2014 20:18:23 ******/
      SET ANSI_NULLS ON
      SET QUOTED_IDENTIFIER ON
      SET ANSI_PADDING ON

      CREATE TABLE [dbo].[tbAddressType](
      	[idAddressType] [int] IDENTITY(1,1) NOT NULL,
      	[dsAddressType] [varchar](20) NOT NULL,
       CONSTRAINT [XPKtbAddressType] PRIMARY KEY CLUSTERED
      (
      	[idAddressType] ASC
      )WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
      ) ON [PRIMARY]

      SET ANSI_PADDING OFF
   ENDTEXT

   AAdd( aRet, cSql )

   //
   
   TEXT INTO cSql
      USE [Harbour]

      /****** Object:  Table [dbo].[tbCountry]    Script Date: 09/04/2014 20:20:26 ******/
      
      IF OBJECT_ID('dbo.tbNewItens', 'U') IS NULL

      SET ANSI_NULLS ON
      SET QUOTED_IDENTIFIER ON
      SET ANSI_PADDING ON

      CREATE TABLE [dbo].[tbCountry](
      	[idCountry] [char](3) NOT NULL,
      	[dsCountry] [varchar](50) NOT NULL,
      	[idContinent] [char](1) NOT NULL,
      	[dsContinent] [varchar](50) NOT NULL,
       CONSTRAINT [XPKtbCountry] PRIMARY KEY CLUSTERED
      (
      	[idCountry] ASC
      )WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
      ) ON [PRIMARY]

      SET ANSI_PADDING OFF
   ENDTEXT

   AAdd( aRet, cSql )

   //
   
   TEXT INTO cSql
      /****** Object:  Table [dbo].[tbCustomer]    Script Date: 09/04/2014 19:56:51 ******/
      SET ANSI_NULLS ON
      SET QUOTED_IDENTIFIER ON
      SET ANSI_PADDING ON

      CREATE TABLE [dbo].[tbCustomer](
      	[idCustomer] [int] IDENTITY(1,1) NOT NULL,
      	[dsEmail] [varchar](100) NULL,
      	[dsPassword] [varchar](50) NULL,
      	[dsPwdCrypto] [varchar](250) NULL,
      	[dsName] [varchar](200) NOT NULL,
      	[dsLastName] [varchar](250) NULL,
      	[dsNickName] [varchar](20) NULL,
      	[idProfile] [int] NOT NULL,
      	[dtCreated] [datetime] NOT NULL,
      	[dtLastLogin] [datetime] NULL,
      	[dtLastOrder] [datetime] NULL,
      	[fgReceiveEmail] [tinyint] NOT NULL,
      	[fgActiveLogin] [tinyint] NOT NULL,
      	[idVipCustomerMain] [varchar](40) NULL,
      	[dtModified] [datetime] NOT NULL,
      	[dtMadeInModified] [datetime] NULL,
      	[dtMadeInCreated] [datetime] NULL,
      	[fldCustomer] [tinyint] NOT NULL,
      	[fgReceiveEmailFormat] [tinyint] NOT NULL,
      	[dtSync] [datetime] NULL,
      	[bitEstrangeiro] [bit] NULL,
       CONSTRAINT [PK_tbReseller] PRIMARY KEY CLUSTERED
      (
      	[idCustomer] ASC
      )WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
      ) ON [PRIMARY]

      SET ANSI_PADDING OFF

      ALTER TABLE [dbo].[tbCustomer] ADD  CONSTRAINT [DF_tbCustomer_fldCustomer]  DEFAULT ((0)) FOR [fldCustomer]
      ALTER TABLE [dbo].[tbCustomer] ADD  CONSTRAINT [DF_tbCustomer_fgReceiveEmailFormat]  DEFAULT ((0)) FOR [fgReceiveEmailFormat]
      ALTER TABLE [dbo].[tbCustomer] ADD  CONSTRAINT [DF_tbCustomer_bitEstrangeiro]  DEFAULT ((0)) FOR [bitEstrangeiro]
   ENDTEXT

   AAdd( aRet, cSql )

   //
   
   TEXT INTO cSql
      /****** Object:  Table [dbo].[tbCustomerDetail]    Script Date: 09/04/2014 19:58:46 ******/
      SET ANSI_NULLS ON
      SET QUOTED_IDENTIFIER ON
      SET ANSI_PADDING ON

      CREATE TABLE [dbo].[tbCustomerDetail](
      	[idCustomer] [int] NOT NULL,
      	[dsCNPJ] [varchar](18) NULL,
      	[dsIE] [varchar](15) NULL,
      	[dsIM] [varchar](15) NULL,
      	[dsResponsible] [varchar](30) NULL,
      	[dsCpf] [varchar](15) NULL,
      	[dtBirthDate] [datetime] NULL,
      	[dsSex] [char](1) NULL,
      	[dsCelularPhone] [varchar](20) NULL,
      	[fgPfPj] [char](1) NOT NULL,
      	[dsRG] [varchar](25) NULL,
      	[dsPhoneDDD1] [varchar](5) NULL,
      	[dsPhone1] [varchar](30) NULL,
      	[dsBranchPhone1] [varchar](20) NULL,
      	[dsPhoneDDD2] [varchar](5) NULL,
      	[dsPhone2] [varchar](30) NULL,
      	[dsBranchPhone2] [varchar](20) NULL,
      	[dsPhoneDDD3] [varchar](5) NULL,
      	[dsPhone3] [varchar](30) NULL,
      	[dsBranchPhone3] [varchar](20) NULL,
      	[dsDispatcherAgency] [varchar](10) NULL,
      	[fgSMS] [tinyint] NOT NULL,
       CONSTRAINT [PK_tbCustomerDetail] PRIMARY KEY CLUSTERED
      (
      	[idCustomer] ASC
      )WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
      ) ON [PRIMARY]

      SET ANSI_PADDING OFF

      ALTER TABLE [dbo].[tbCustomerDetail] ADD  CONSTRAINT [DF_tbCustomerDetail_fgSMS]  DEFAULT ((0)) FOR [fgSMS]
      ALTER TABLE [dbo].[tbCustomerDetail]  WITH CHECK ADD  CONSTRAINT [FK_tbCustomer_tbCustomerDetail] FOREIGN KEY([idCustomer])
      REFERENCES [dbo].[tbCustomer] ([idCustomer])
      ALTER TABLE [dbo].[tbCustomerDetail] CHECK CONSTRAINT [FK_tbCustomer_tbCustomerDetail]
   ENDTEXT

   AAdd( aRet, cSql )

   //
   
   TEXT INTO cSql
      /****** Object:  Table [dbo].[tbCustomerDeliveryAddr]    Script Date: 09/04/2014 20:00:31 ******/
      SET ANSI_NULLS ON
      SET QUOTED_IDENTIFIER ON
      SET ANSI_PADDING ON

      CREATE TABLE [dbo].[tbCustomerDeliveryAddr](
      	[idCustomerDeliveryAddr] [int] IDENTITY(1,1) NOT NULL,
      	[dsDestinationName] [varchar](200) NOT NULL,
      	[dsAddress] [varchar](80) NOT NULL,
      	[dsNumber] [varchar](10) NOT NULL,
      	[dsComplement] [varchar](30) NULL,
      	[dsZip] [varchar](10) NULL,
      	[dsCity] [varchar](40) NULL,
      	[dsDistrict] [varchar](40) NULL,
      	[idCustomer] [int] NOT NULL,
      	[idCountry] [char](3) NOT NULL,
      	[idState] [char](2) NOT NULL,
      	[dsReferenceAddress] [varchar](200) NULL,
      	[fgCustomerAddress] [tinyint] NOT NULL,
      	[fgMainAddress] [tinyint] NOT NULL,
      	[dsParentHood] [varchar](20) NULL,
      	[dsEmail] [varchar](100) NULL,
      	[dsProvince] [varchar](30) NULL,
      	[dsDeliveryName] [varchar](200) NULL,
      	[dsPhoneDDD1] [varchar](5) NULL,
      	[dsPhone1] [varchar](30) NULL,
      	[dsBranchPhone1] [varchar](20) NULL,
      	[dsPhoneDDD2] [varchar](5) NULL,
      	[dsPhone2] [varchar](30) NULL,
      	[dsBranchPhone2] [varchar](20) NULL,
      	[dsPhoneDDD3] [varchar](5) NULL,
      	[dsPhone3] [varchar](30) NULL,
      	[dsBranchPhone3] [varchar](20) NULL,
      	[idAddressType] [int] NULL,
      	[dtMadeInCreated] [datetime] NULL,
      	[dtMadeInModified] [datetime] NULL,
       CONSTRAINT [PK_tbCustomerAddr] PRIMARY KEY CLUSTERED
      (
      	[idCustomerDeliveryAddr] ASC
      )WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
      ) ON [PRIMARY]

      SET ANSI_PADDING OFF

      ALTER TABLE [dbo].[tbCustomerDeliveryAddr]  WITH CHECK ADD  CONSTRAINT [FK_tbAddressType_tbCustomerDeliveryAddr] FOREIGN KEY([idAddressType])
      REFERENCES [dbo].[tbAddressType] ([idAddressType])

      ALTER TABLE [dbo].[tbCustomerDeliveryAddr] CHECK CONSTRAINT [FK_tbAddressType_tbCustomerDeliveryAddr]

      ALTER TABLE [dbo].[tbCustomerDeliveryAddr]  WITH CHECK ADD  CONSTRAINT [FK_tbCountry_tbCustomDeliveryAddr] FOREIGN KEY([idCountry])
      REFERENCES [dbo].[tbCountry] ([idCountry])

      ALTER TABLE [dbo].[tbCustomerDeliveryAddr] CHECK CONSTRAINT [FK_tbCountry_tbCustomDeliveryAddr]

      ALTER TABLE [dbo].[tbCustomerDeliveryAddr]  WITH CHECK ADD  CONSTRAINT [FK_tbCustomer_tbCustomerAddr] FOREIGN KEY([idCustomer])
      REFERENCES [dbo].[tbCustomer] ([idCustomer])

      ALTER TABLE [dbo].[tbCustomerDeliveryAddr] CHECK CONSTRAINT [FK_tbCustomer_tbCustomerAddr]
   ENDTEXT

   AAdd( aRet, cSql )

RETURN aRet
//------------------------------------------------------------------------------
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Fazendo Backup no Banco de Dados MYSQL

Mensagem por rochinha »

Amiguinho,

Veja se o MySQL aceita o comando:

Código: Selecionar todos

BACKUP DATABASE NomeDoDatabase TO DISK='C:\BACKUPS\NomeDoDatabase.bak'
Para restaurar:

Código: Selecionar todos

RESTORE DATABASE NomeDoDatabase FROM DISK='C:\BACKUPS\NomeDoDatabase.bak'
Não uso ainda o MySQL mas sei que algum SQL tem estes comandos.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Fazendo Backup no Banco de Dados MYSQL

Mensagem por asimoes »

Faço assim no MariaDb

Código: Selecionar todos

mysqldump --databases --routines --triggers asaprev -u root -p****** >> backupbanco\backupbanco.sql

::Execute( "mysqldump", "--databases --routines --triggers asaprev -u root -p***** >> backupbanco\backupbanco.sql ", .T. ) //faz dump do banco de dados
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Fazendo Backup no Banco de Dados MYSQL

Mensagem por alxsts »

Olá!

Como seria o comando para restore?
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Fazendo Backup no Banco de Dados MYSQL

Mensagem por JoséQuintas »

09466261000176 escreveu:Usar o MYSQLDUMP tudo bem consigo, porém o que quero é embutir dento de meu fonte comandos SQL para realizar esta operação. Não quero fazer isso por um .BAT nem direto na console do MYSQL. Fica mais elegante o próprio programa executar.
Não existe comando SQL pra backup.
Existem utilitários que fazem backup.
Ou faz no aplicativo uma chamada de um programa de backup, com o comando que ele precisa, ou cria toda uma rotina de backup no aplicativo.
O MySQLDump é um dos utilitários que fazem backup.

Pra fazer pelo aplicativo, vários comandos select *, um pra cada tabela, e mais pra stored procedures, views, etc.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder