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: 1912
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: 1912
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: 3108
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: 4666
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Curtiu: 1 vez
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: 3108
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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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