Jeszcze jeden blog o programowaniu

Radosne twórczości leniwego programisty

Archive for the ‘MySQL’ Category

Odtwarzanie tabeli InnoDB

leave a comment »

MySQL logoW kilku projektach zdarzyło mi się z bliżej nieokreślonych powodów podczas próby czyszczenia cache w Drupalu wystąpienie błędu MySQL w postaci:

mysql> show tables;
+--------------------------------------+
| Tables_in_drupal7demo                |
+--------------------------------------+
| ...                                  |
| cache_apachesolr                     |
| ...                                  |
+--------------------------------------+
108 rows in set (0.00 sec)
mysql> TRUNCATE `cache_apachesolr`;
ERROR 1146 (42S02): Table 'drupal7demo.cache_solr' doesn't exist

Mogło to być spowodowane wykonaniem polecenia TRUNCATE `cache_apachesolr` i sposobem w jaki w rzeczywistości wykonywane jest polecenie TRUNCATE.

Jednym z najprostszych rozwiązań jakie udało mi się znaleźć jest odtworzenie struktury tabeli, a ponieważ praktycznie każda próba odczytu/zapisu z/do tabeli zwróci komunikat błędu (np.: ERROR 1030 (HY000): Got error -1 from storage engine) musimy dodać jeszcze jedno polecenie w ostateczności wykonując poniższe polecenia:

ALTER TABLE `cache_apachesolr` DISCARD TABLESPACE;
DROP TABLE IF EXISTS `cache_apachesolr`;
CREATE TABLE `cache_apachesolr` (
`cid` varchar(255) NOT NULL DEFAULT '' COMMENT 'Primary Key: Unique cache ID.',
`data` longblob COMMENT 'A collection of data to cache.',
`expire` int(11) NOT NULL DEFAULT '0' COMMENT 'A Unix timestamp indicating when the cache entry should expire, or 0 for never.',
`created` int(11) NOT NULL DEFAULT '0' COMMENT 'A Unix timestamp indicating when the cache entry was created.',
`serialized` smallint(6) NOT NULL DEFAULT '0' COMMENT 'A flag to indicate whether content is serialized (1) or not (0).',
PRIMARY KEY (`cid`),
KEY `expire` (`expire`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Cache table for apachesolr to store Luke data and...';

Potencjalne przyczyny problemu: http://dba.stackexchange.com/a/6269

Źródło rozwiązania: http://www.palominodb.com/blog/2011/11/02/how-recreate-innodb-table-after-tablespace-has-been-removed

Kilka innych pomysłów, które można wypróbować by odzyskać tabele: http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file

Written by filipgorczynski

2014.01.11 at 06:04:13

Eksport wszystkich baz z MySQL do plików SQL

5 komentarzy

Eksport wszystkich baz danych z MySQL.

<?php
header('Content-type: text/html; charset=utf-8');
class Config {
   public static $host = '127.0.0.1';
   public static $username = 'root';
   public static $password = '';
   public static $port = 3306;
}

if (!file_exists('dbdumps') || !is_dir('dbdumps'))
   mkdir('dbdumps', 0700);

$dsn = 'mysql:host=' . Config::$host . ';port=' . Config::$port;
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
$dbh = new PDO($dsn, Config::$username, Config::$password, $options);

$result = $dbh->query('SHOW DATABASES;');
if ($result !== false)
   foreach ($result->fetchAll() as $row) {
      $cmd = 'mysqldump -u ' . Config::$username . ' -p' . Config::$password
         . ' ' . $row['Database'] . ' > dbdumps/' . $row['Database'] . '.sql';
      system($cmd);
      $fileSize = filesize('dbdumps/' . $row['Database'] . '.sql');
      echo 'File ' . $row['Database'] . '.sql saved [' . $fileSize . ' bytes] .<br />';
   }

Written by filipgorczynski

2012.10.12 at 19:09:15

PhpMyAdmin – konfiguracja autologowania

leave a comment »

Po ściągnięciu najnowszej wersji PhpMyAdmin praktycznie każda próba wejścia do panelu będzie wymagała od nas podania loginu i hasła. Na komputerach developerskich często jest to niewielkie utrudnienie. Aby logowanie następowało automatycznie należy:
1. Otwieramy plik PhpMyAdmin/libraries/config.default.php, gdzie PhpMyAdmin to lokalizacja panelu na serwerze.
2. Zmieniamy wartość:

$cfg['Servers'][$i]['host'] = 'localhost'; // lub odpowiednia nazwa hosta, o ile wcześniej nie była ustawiona

3. Zmieniamy wartość:

$cfg['Servers'][$i]['auth_type'] = 'config'; // wcześniej cookie

4. Zmieniamy wartość:

$cfg['Servers'][$i]['user'] = 'mysql_username'; // nazwa użytkownika, najczęściej root

5. Zmieniamy wartość:

$cfg['Servers'][$i]['password'] = 'mysql_password'; // hasło użytkownika, najczęściej użytkownika root

6. Wchodzimy na stronę PhpMyAdmin na naszym serwerze i powinniśmy automatycznie być zalogowani.

Drupal 6 – Instalacja

2 komentarze

W związku z tym, że od pewnego czasu próbuję nauczyć się Drupala na poziomie „początkujący” postaram się opisywać różne rozwiązania potencjalnych problemów, konfiguracje oraz opisy modułów. Wpis ten (mam nadzieję, że kolejne się także pojawią) dotyczy aktualnie stabilnej wersji 6.25 ze względu na ogromną ilość materiałów i  modułów dostępnych w sieci. Proszę o wyrozumiałość, gdyż sam jestem na etapie nauki i do kompletnego opanowania tego CMSa dużo mi jeszcze brakuje. Powstające wpisy nie są kompletnym opisem możliwości Drupala ani rozwiązań użytych przy budowie stron – mają być dla mnie jedynie materiałem do przypominania róznych zagadnień.

Pierwszym krokiem, jaki należy wykonać jest sprawdzenie wymagań jakie stawia nam Drupal. Dokładne informacje znajdują się na stronie http://drupal.org/requirements. W skrócie są to:

Miejsce na dysku 15 MB – zalecałbym więcej (moduły, skórki, dodatkowe pliki),
Serwer WWW:  Apache 1.3, Apache 2.x lub Microsoft IIS,
Serwer baz danych: MySQL 4.1 lub nowszy,
PHP 4.4.0 lub nowszy (5.2 zalecany) – warto także włączyć np.: APC

Jeśli spełniamy wymagania kroku pierwszego, to…

Drugi krok to pobranie aktualnej wersji Drupala ze strony projektu http://drupal.org/project/drupal. Adres ten używany jest także do określania lokalizacji modułów Drupala. Sam Drupal jak i jego moduły traktowane są w tym wypadku tak samo. Moduły dostępne są więc pod adresem http://drupal.org/project/NAZWA_MODUŁU. Pobrane archiwum instalacyjne Drupala należy rozpakować w katalogu głównym serwera lub odpowiednio do katalogu – w moim przypadku jest to katalog drupal_install (ścieżka c:/htdocs/drupal_install).

Tworzymy bazę danych (dowolny klient MySQL, np. phpMyAdmin), która zostanie wykorzystana przez Drupala – także nazwałem ją drupal_install. Jako metodę porównywania napisów utf8_general_ci.

Instalacja CMS rozpoczyna się od przejścia pod adres http://localhost/drupal_install, co zaowocuje pojawieniem się pierwszego ekranu, w którym będzie można wybrać język instalacji. Tutaj wybrałem język angielski jako domyślny. Wybranie innego języka do instalacji przedstawię w innym wpisie.

Drupal 6 - Instalacja: Ekran powitalny

Wybieramy więc opcję „Install Drupal in English”. Pojawia się kolejny ekran z nieprzyjemnym czerwonym komunikatem informującym o braku pliku z ustawieniami oraz przedstawia sposób jego utworzenia.

Drupal 6 - Instalacja: Plik z konfiguracją

Postępując zgodnie z zaleceniami przechodzimy do katalogu ./sites/default gdzie znajdziemy plik default.settings.php, który zaleca się skopiować pod nową nazwą settings.php oraz nadajemy mu prawa do zapisu przez serwer www (w Windowsie nie jest to wymagane). Następnie odświeżamy stronę lub klikamy w link na dole strony „try again” co przeniesie nas do ekranu konfiguracji bazy danych.

Drupal 6 - Instalacja: Konfiguracja bazy danych

Wypełniamy wymagane pola – w domyślnej instalacji MySQL wypełnić musimy tylko nazwę bazy danych (Database name) oraz nazwę użytkownika (Database username). Jeśli MySQL został wcześniej skonfigurowany, podajemy także odpowiednie hasło, ewentualnie port (jeśli inny niż domyślny 3306) oraz prefiks w tabeli, jeśli chcemy w jakiś sposób wyróżnić aktualną instalację Drupala lub jeśli wymaga tego środowisko. Jeśli wprowadzone informacje nie pozwolą połączyć się z bazą danych zostaniemy poproszeni o ich weryfikację.

W przedostatnim kroku określamy podstawową konfigurację strony – jej nazwę, główny adres e-mail oraz co najważniejsze nazwę i hasło głównego administratora. Jest to osoba o praktycznie nieograniczonej potędze w środowisku Drupala – użytkownik o ID = 1. Ze względów bezpieczeństwa warto określić dla niego skomplikowane hasło.
Jedną z bardzo przydatnych opcji – zalecanych do włączenia – jest Clean URLs. Pozwala ona wykorzystać możliwości mod_rewrite w serwerze Apache – co ostatecznie przekłada się na ładne adresy URL, np.: serwer.com/to-jest-nowa-strona zamiast serwer.com zamiast serwer.com/?q=node/1.

Drupal 6 - Instalacja: Konfiguracja strony

Dobrze jest także pozostawić zaznaczoną opcję Check for updates automatically ponieważ dzięki temu Drupal co jakiś czas będzie informował nas o pojawiających się aktualizacjach – zarówno w samym jądrze Drupala jak i w zainstalowanych modułach. Kliknięcie przycisku Save and continue spowoduje wyświetlenie paska postępu informującego o  tworzeniu struktury bazy danych oraz przebiegu instalacji.

Drupal 6 - Instalacja: Podsumowanie instalacji

Gdy pasek postępu osiągnie magiczne 100% otrzymamy podsumowanie instalacji oraz możliwość odwiedzenia strony świeżo zainstalowanej wersji Drupala. Automatycznie zostaniemy także zalogowani na konto administratora (które utworzyliśmy w kroku Configure site).

Drupal 6 - Instalacja: Koniec instalacji

Dobrym pomysłem jest także usunięcie kilku plików z katalogu głównego Drupala, m. in.: INSTALL.mysql.txt, INSTALL.pgsql.txt, install.php.

Powyższy proces instalacji opisany jest także (po angielsku) w pliku INSTALL.txt .

Written by filipgorczynski

2012.06.27 at 20:21:48

%d blogerów lubi to: