miércoles, 1 de enero de 2014

Un DBA MySQL mira PostgreSQL part2: MySQL a PostgreSQL

Original post: http://anothermysqldba.blogspot.com/2014/01/a-mysql-dba-looks-at-postgresql-part2.html

Así que recientemente he publicado: Un DBA MySQL mira PostgreSQL

Este post va a explorar la migración de MySQL a PostgreSQL . Pronto voy a seguir con unaPostgreSQL migración de regreso a MySQL . El objetivo a largo plazo con estos mensajes es mostrar cómo funciona la información dentro de las diferentes bases de datos, así como la forma de resolver problemas similares en cada base de datos, cuando debería surgir.

Para las migraciones Voy a usar el ejemplo de uso frecuente: la base de datos del mundodisponibles en dev.mysql.com .

También voy a reconocer esto, tengo más experiencia con MySQL a PostgreSQL . PostgreSQLDBA podría escribir y recomendar diferentes soluciones a este tipo de situaciones. Este es también un ejemplo muy sencillo.

En primer lugar para asegurar que este proceso es de principio a fin:


mysql> create database world;
Query OK, 1 row affected (0.00 sec

# mysql world < world_innodb.sql
mysql> show create table City;
CREATE TABLE `City` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` char(35) NOT NULL DEFAULT '',
`CountryCode` char(3) NOT NULL DEFAULT '',
`District` char(20) NOT NULL DEFAULT '',
`Population` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`),
KEY `CountryCode` (`CountryCode`),
CONSTRAINT `city_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES `Country` (`Code`)
) ENGINE=InnoDB

mysql> select count(ID) from City\G
*************************** 1. row ***************************
count(ID): 4079 


Así que ahora vamos a ver si el PostgreSQL base de datos configurado y listo.

# su postgres
$ psql
psql (9.3.2)
Type "help" for help.

postgres=# CREATE DATABASE world;
CREATE DATABASE

# GRANT ALL ON DATABASE world TO testuser;
GRANT 


postgres=# \q 


Este script de perl sencilla ( mysql2pgsql.perl ) ayuda a que el proceso de migración deMySQL a PostgreSQL .


# su testuser
$ cd
$ pwd
/home/testuser
$ wget http://pgfoundry.org/frs/download.php/1535/mysql2pgsql.perl 


Reúna los MySQL de datos y tenerlo listo.

mysqldump -u root -p world > mysql2postgresql.sql
$ ./mysql2pgsql.perl mysql2postgresql.sql mysql2postgresql.pgsql
table "city" will be dropped CASCADE
"city_id_seq"--
table "country" will be dropped CASCADE
table "countrylanguage" will be dropped CASCADE

$ psql world < mysql2postgresql.pgsql | more
DROP TABLE
DROP SEQUENCE
CREATE SEQUENCE
CREATE TABLE
INSERT 0 1 

..
INSERT 0 1
AVISO: Las cascadas de caída a otros 2 objetos
DETALLE: caer en cascada a la restricción en la mesa countrylanguage_countrycode_fkey countrylanguage
caer en cascada a la restricción city_countrycode_fkey en la mesa de la ciudad
..
INSERT 0 1
INSERT 0 1
DROP TABLE
CREATE TABLE
INSERT 0 1
INSERT 0 1
..
INSERT 0 1
CREATE INDEX
ALTER TABLE


Así que vamos a ver lo que tenemos.


$ psql -d world
psql (9.3.2)
Type "help" for help.

world=> \dt
List of relations
Schema | Name | Type | Owner
--------+-----------------+-------+----------
public | city | table | testuser
public | country | table | testuser
public | countrylanguage | table | testuser
(3 rows) 


mundo => select count (ID) de la Ciudad;
contar
-------
4079
(1 row)

mundo => select * from límite de la ciudad de 10;
Identificación | nombre | código del país | barrio | población
---- + ------------------------------------- + ------- ------ + ---------------------- + ------------
1 | Kabul | AFG | Kabol | 1780000
2 | Qandahar | AFG | Qandahar | 237500
3 | Herat | AFG | Herat | 186800
4 | Mazar-e-Sharif | AFG | Balkh | 127800
5 | Amsterdam | NLD | Holanda del Norte | 731200
6 | Rotterdam | NLD | Zuid-Holland | 593321
7 | Haag | NLD | Zuid-Holland | 440900
8 | Utrecht | NLD | Utrecht | 234323
9 | Eindhoven | NLD | Noord-Brabant | 201843
10 | Tilburg | NLD | Noord-Brabant | 193238
(10 filas)

mundo => \ dt + City
Lista de las relaciones
Esquema | Nombre | Tipo | Propietario | Tamaño | Descripción
-------- + ------ + ------- + ---------- + -------- + ------ -------
público | ciudad | Mesa | testuser | 432 kB |
(1 row)


Pues los recuentos coinciden y los datos están disponibles. Pero ahora quiero ver la versión MySQL de un "SHOW CREATE TABLE"; Tenga en cuenta que en MySQL CREATE DATABASE y CREATE SCHEMA son básicamente la misma cosa.


$ pg_dump -t city -s world
--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;

SET search_path = public, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: city; Type: TABLE; Schema: public; Owner: testuser; Tablespace:
--

CREATE TABLE city (
id integer DEFAULT nextval('city_id_seq'::regclass) NOT NULL,
name character(35) DEFAULT ''::bpchar NOT NULL,
countrycode character(3) DEFAULT ''::bpchar NOT NULL,
district character(20) DEFAULT ''::bpchar NOT NULL,
population integer DEFAULT 0 NOT NULL
);


ALTER TABLE public.city OWNER TO testuser;

--
-- Name: city_pkey; Type: CONSTRAINT; Schema: public; Owner: testuser; Tablespace:
--

ALTER TABLE ONLY city
ADD CONSTRAINT city_pkey PRIMARY KEY (id);


--
-- Name: city_countrycode_idx; Type: INDEX; Schema: public; Owner: testuser; Tablespace:
--

CREATE INDEX city_countrycode_idx ON city USING btree (countrycode);


--
-- PostgreSQL database dump complete
-- 


Como se puede ver para ver la tabla es el mismo que un comando mysqldump
$ Mysqldump-u root-p - NO_DATA - mundo de base de datos - tablas City
Más trabajo que un típico MySQL está acostumbrado a tener que hacer sólo para ver la estructura de la tabla.

Sin embargo, nuestros datos y el esquema se mueve encima en PostgreSQL desde MySQL .

Otro post pronto por venir ... Si lo mueve hacia atrás.

martes, 31 de diciembre de 2013

Un DBA MySQL mira PostgreSQL

Original post: http://anothermysqldba.blogspot.com/2013/12/a-mysql-dba-looks-at-postgresql.html

Así que este es un viaje del / a MySQL DBA mirar en PostgreSQL . No es un ataque sólo observaciones y ejemplos. 

El uso de CentOS 6.5 de 64 bits: 

rpm-ivh http://yum.postgresql.org/9.3/redhat/rhel-6.5-x86_64/pgdg-centos93-9.3-1.noarch.rpm

ñam groupinstall "Base de datos PostgreSQL Server 9.3 PGDG" 
Se instalarán ---> Paquete postgresql93.x86_64 0:9.3.2-1PGDG. RHEL6 
---> Se instalará postgresql93-contrib.x86_64 Paquete 0:9.3.2-1PGDG. RHEL6 
---> Se instalará postgresql93-libs.x86_64 Paquete 0:9.3.2-1PGDG. RHEL6 
 
---> Se instalará Paquete postgresql93-server.x86_64 0:9.3.2-1PGDG. RHEL6 

yum install postgresql93-servidor 

servicio postgresql-9.3 initdb 
Base de datos Inicialización: [OK] 
postgresql-9.3 puesta en servicio 
A partir postgresql-9.3 servicio: [OK] 
chkconfig postgresql-9.3 en 

Todos los siguientes ejemplos se basan en el PostgreSQL Wiki 
# Su - postgres 
-Bash-4.1 $ psql 
 
psql (9.3.2) 

postgres = # CREAR USUARIO CONTRASEÑA testuser '1234 '; 
CREATE ROLE 
postgres = # GRANT ALL ON SCHEMA prueba por TestUser; 
GRANT 

postgres = # GRANT ALL ON todas las tablas de prueba SCHEMA por TestUser; 
GRANT 
postgres = # \ q
-Bash-4.1 $ exit
logout
# Su testuser

$ Pwd 
/ Home / testuser 
$ psql-d postgres 
psql (9.3.2) 

Escriba "help" para obtener ayuda. 
postgres => CREATE test.test MESA (varchar COLTEST (20));
CREATE TABLE
postgres => insertan en test.test valores (COLTEST) ('It works!');
INSERT 0 1
postgres => SELECT * FROM test.test;
COLTEST
-----------
¡Funciona!
(1 row)

postgres => test.test DROP TABLE;
DROP TABLE
postgres =>

Me di cuenta de que estas declaraciones de subvención trabajaron bien con 9.3 pero la distro originalmente instalado una versión 8. * Y algunos de los comandos fallé. 

Por cierto ... Usted, por supuesto, todavía tiene las características que usted esperaría de un sistema RDBM estable.Concedidos estos son ejemplos sencillos. 

postgres => EXPLAIN SELECT * de test.test; 
PLAN DE CONSULTA 
-------------------------------------------------- ------ 
Sec. Scan en la prueba (cost = 0.00 .. 19.20 rows = 920 width = 58) 

Mostrar bases de datos == \ l 
postgres-> \ l 
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | 
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | = c / postgres + 
| | | | | Postgres = TACc / postgres 
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | = c / postgres + 

| | | | | Postgres = TACc / postgres 

USO es el estándar SQL: 
postgres-> Usar postgres 

Enumerar todos los esquemas: 

postgres-> \ dn 
públicas | postgres 

prueba | postgres 

SHOW CREATE TABLE y etc, son un poco más de trabajo. Concedido un DBA MySQL lo verá como más trabajo, porque de lo que estamos acostumbrados a hacer. PostgreSQL utiliza espacios de tabla más de usuarios de MySQL están acostumbrados a hacer.

  postgres => CREATE sometable MESA (varchar SomeField (255), varchar anotherfield (150), fecha datefield); 
  CREATE TABLE 
  postgres => INSERT INTO VALORES sometable (SomeField, anotherfield, DateField) ('fubar', 'rabuf', '2013-12-30 '); 
  INSERT 0 1 
  postgres => INSERT INTO VALORES sometable (SomeField, anotherfield, DateField) ('fubar', 'rabuf', NOW ()); 
  INSERT 0 1 
  postgres => INSERT INTO VALORES sometable (SomeField, anotherfield, DateField) ('fubar2', 'rabuf2', NOW ()); 
  INSERT 0 1 
  postgres => select * from sometable; 
   SomeField | anotherfield | datefield   
  ----------- + -------------- + ------------ 
   fubar | rabuf | 30/12/2013 
   fubar | rabuf | 30/12/2013 
   fubar2 | rabuf2 | 12/30/2013 
  (3 filas) 

postgres => select * from sometable DONDE SomeField = 'fubar'; SomeField | anotherfield | datefield ----------- + -------------- + ---- -------- fubar | rabuf | 30/12/2013 fubar | rabuf | 12/30/2013 (2 filas)

postgres => \? <- La ayuda que le mostrará cómo navegar alrededor.

Mostrar las tablas == \ dt

postgres => \ dt
Lista de las relaciones
Esquema | Nombre | Tipo | Propietario
-------- + ----------- + ------- + ----------
público | sometable | Mesa | testuser

postgres => ALTER TABLE ADD COLUMN sometable intfield int [11]; ALTER TABLE

postgres => select * from sometable; SomeField | anotherfield | datefield | intfield ----------- + -------------- + -------- ---- + ---------- fubar | rabuf | 12/30/2013 | fubar | rabuf | 12/30/2013 | fubar2 | rabuf2 | 12/30/2013 | (3 filas)

Mostrar create table == \ d + nombre de tabla
postgres => \ d + sometable
Tabla "public.sometable"
Columna | Tipo | Modificadores | Almacenamiento | Estadísticas destino | Descripción
-------------- + ------------------------ + ---------- - + ---------- + -------------- + -------------
SomeField | carácter variable (255) | | ampliada | |
anotherfield | carácter variable (150) | | ampliada | |
datefield | Fecha | | llano | |
intfield | entero [] | | ampliada | |
Tiene OID: no


Para ayudar a que más puede instalar pgadmin
yum install pgadmin3_93

Conseguir que para trabajar y cómo funciona podría ser otro post entero blog.

Hasta ahora .... Me quedo con MySQL, pero esto es sólo un ejemplo simplista de usar PostgreSQL. Esto puede ayudarle a empezar a usted puede evaluar por sí mismo.

Enlaces Útiles abajo. Por favor refiérase a estos, ya que tienen más experiencia con PostgreSQL que yo.

sábado, 7 de diciembre de 2013

ERROR 1356 (HY000)

Original post:  http://anothermysqldba.blogspot.com/2013/12/error-1356-hy000.html


Lo más importante de entender cuando viene sobre un error es tomar un momento y relajarse. 
A veces la gente se encuentra con un error y se vuelven nerviosos y frustrados. Tome una respiración profunda y relajarse. A veces, " La locura es como la gravedad. Todo lo que necesita es un poco de empuje "y" A veces las preguntas son complicadas y las respuestas son simples . " 

¿Qué es todo esto? Bueno, por ejemplo, se me pidió recientemente para ayudar a resolver un problema que preocupaba otra DBA. Nada significaba en la falta de respeto a todos a que DBA pero estar en un pueblo de acometidas apenas dan a la respuesta que está en frente de ellos y en lugar de espiral hacia abajo en la locura . 

Este es el concepto general de la situación. 

Después de hacer un mysqldump de una base de datos que el usuario se mudó a otra base de datos para que otros puedan ser pruebas. La importación funcionaba bien. Sin embargo, los usuarios comenzaron a aparecer errores al tratar de consultar desde un punto de vista pre-compilados. 

mysql> select * from límite <nombre_vista> 1; 

ERROR 1356 (HY000): View '. <nombre_bd> <viewname>' Referencias mesa (s) inválida o columna (s) o la función (s) o definidor / invocador de vista de los derechos carecen de usarlos 

La primera reacción fue pensar que el que algo salió mal con la importación. Hizo la vista o en realidad las tablas relacionadas se corrompen? 

No. 

Para solucionar este error lo primero que TODO era: mysql> SHOW CREATE vista <nombre_vista> \ G 

Es probable que vea algo que comienza así: 
*************************** 1. fila *************************** 
Vista: Visitantes 
 
Crear vista: CREATE ALGORITMO = DEFINER UNDEFINED = `<Some_user>` @ `<Some_host_or_IP>` SQL SECURITY DEFINER VISTA 

Después de ver que el definidor es: `<Some_user>` @ `<Some_host_or_IP>` que puedas ver las subvenciones para ese usuario. 

mysql> SHOW GRANTS para `<Some_user>` @ `<Some_host_or_IP>`; 

Resulta que la solución era sólo lo que dijo el error en el primer lugar: "definidor / invocador de los derechos de vista la falta usarlos" 

Para hacer más fácil que usted puede hacer un show subvenciones en la base de datos en el que ya trabaja y copiar la instrucción de concesión, o puede revisar qué tipo de permisos que necesita para implementar en la nueva base de datos para que el fin de reunir los datos necesarios. 

Una simple actualización de los permisos para el usuario y el error se había ido. 

" A veces las respuestas son sencillas . "