Mysql replication slave -- Could not initialize master info structure

При change master на mysql slave  излиза следната грешка съпроводена с решение :) :

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CHANGE MASTER TO MASTER_HOST='192.193.123.4', MASTER_USER='slaveuser', MASTER_PASSWORD='pass', MASTER_LOG_FILE='mysql-bin.000020', MASTER_LOG_POS=49869;
ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log

mysql> reset slave;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_HOST='192.193.123.4', MASTER_USER='slaveuser', MASTER_PASSWORD='pass', MASTER_LOG_FILE='mysql-bin.000020', MASTER_LOG_POS=49869;
Query OK, 0 rows affected (0.02 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Режим само за четене в mysqld

Идяета е да се стартира mysqld които да предлага само четене без запис. Това е подходящо за репликиращи схеми и други.

Първи метод :
1.1

Със Superuser т.е. root сетвамее read_only=1 или read_only=yes

mysql-h localhost-u root-p
set GLOBAL read_only = true;

Със нормален потребител притежаващ пълни права върху конкретна база изпълняваме следната заявка:

mysql> insert into x (c) values ('test_mysql_read_only_by_amri');
ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement

За да активираме write правата на всеки нормален потребител(изключение е само root):

mysql-h localhost-u root-p
set GLOBAL read_only = false;

1.2
Във файл /etc/mysql/my.cnf и по- точно в секция [mysqld] се добавя:

[mysqld]
read_only=1

/etc/init.d/mysql restart;

Втори метод за заключване на таблиците само за четене:

2.1
Отварят се две конзоли свързани към mysql. На втората се изпълнява(заключваме):

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.01 sec)

На първата конзола която също е свързана към mysql се прави опит за INSERT , но не става :)

За да се активира отново на втората конзола се изпълнява:

mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

mysql-proxy + memcached -- Инсталиране и конфигуриране

Идеята е да се обедини mysql-proxy + memcache. Защо ?
Защото искам всяка select заявка да се кешира в memcache. Ако не е кеширана да я кешира и при следващо извикване да я извлича от memcache.

Защо не се пусне само memcache и от самото php да се свързва към memcache демона ?

Защото по този метод (разгледана в публикацията) не се налага да се променя кода на писане т.е. просто се php приложението се свързва към localhost:4040 вместо към localhost (порта 4040 може да бъде променян разбира се, дори и на 3306 )

aptitude install lua5.1 liblua5.1-md5-0 liblua5.1-socket2 luarocks memcached mysql-proxy
mkdir /tmp/mysql-proxy-memcache-temp;
cd /tmp/mysql-proxy-memcache-temp;

wget http://luaforge.net/frs/download.php/4041/liblua5.1-memcached0.deb
wget http://luamemcached.googlecode.com/files/liblua5.1-memcached0.deb

wget http://luarocks.org/releases/luarocks-2.0.4.1.tar.gz

tar zxvf luarocks-2.0.4.1.tar.gz

./configure
make
make install;

luarocks install md5

cd /tmp/mysql-proxy-memcache-temp;
wget http://luaforge.net/frs/download.php/4542/luamemcached.0.7.tar.gz
tar xzvf luamemcached.0.7.tar.gz
mv *.lua /usr/local/share/lua/5.1/
luarocks install luasocket

cp mysql-proxy-cache.lua /usr/share/mysql-proxy/

mysql-proxy --proxy-lua-script=/usr/share/mysql-proxy/mysql-proxy-cache.lua

Код на mysql-proxy-cache.lua :

require('luarocks.require')
require('md5')
require('Memcached')
local memcache = Memcached.Connect()
cache_hits = 0
cache_misses = 0
cache_timeout = 30
function is_query(packet)
return packet:byte() == proxy.COM_QUERY
end

function is_cacheable(query)
return query:sub(1,6):lower() == 'select'
end

function to_hash(query)
db = proxy.connection.client.default_db
return md5.sumhexa(query..'db'..db)
end

function cache_get(query)
db = proxy.connection.client.default_db
local result = deserialize(memcache:get(to_hash(query)))
if result then
print('HIT: '..to_hash(query)..' ('..query..') DB:'..db)
cache_hits = cache_hits + 1
else
print('MISS: '..to_hash(query)..' ('..query..') DB:'..db)
cache_misses = cache_misses + 1
end

print('Cache hit ratio: '..cache_hits..'/'..cache_misses..' = '..cache_hits/cache_misses..' DB:'..db)

return result
end

function cache_set(result_packet)
local resultset_is_needed = false
local query = result_packet.query:sub(2)
local field_count = 1
local fields = result_packet.resultset.fields
local resultset = {rows={}, fields={}}

print('SET: '..to_hash(query)..' ('..query..')')

while fields[field_count] do
local field = fields[field_count]
--added third option, expiry time.
table.insert(resultset.fields, {type=field.type, name=field.name} )
field_count = field_count + 1
end

for row in result_packet.resultset.rows do
table.insert(resultset.rows, row)
end

memcache:set(to_hash(query), serialize(resultset), cache_timeout)
end

function serialize(o)
local result = {}
local o_type = type(o)

if o_type == "number" then
table.insert(result, o)

elseif o_type == "string" then
table.insert(result, string.format("%q", o))

elseif o_type == "table" then
table.insert(result, "{")
for key, value in pairs(o) do
for i, str in pairs({"[", serialize(key), "]=",
serialize(value), ","}) do
table.insert(result, str)
end
end
table.insert(result, "}")

elseif o_type == "nil" then
table.insert(result, "nil")

else
error("cannot serialize a " .. o_type)
end

return table.concat(result, ")
end

function deserialize(s)
if s then
return loadstring('return '..s)()
else
return nil
end
end

function read_query( packet )
if is_query(packet) then
local query = packet:sub(2)

if is_cacheable(query) then
local resultset = cache_get(query)
if resultset then
--- Cache hit
proxy.response.type = proxy.MYSQLD_PACKET_OK
proxy.response.resultset = resultset

return proxy.PROXY_SEND_RESULT
else
--- Cache miss
proxy.queries:append(1, packet,{resultset_is_needed = true})

return proxy.PROXY_SEND_QUERY
end
end
end
end

function read_query_result(result_packet)
--- This only gets called if the proxy.queries queue is modified
cache_set(result_packet)
end

PS: Нямах намерение да пиша тази публикация, но я написах защото Благо беше казал, че ще му бъде интересно това решение. Ето Благо,  специално за теб :P

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

mysql -- Access denied for user ‘debian-sys-maint’@'localhost’ (using password: YES)

Когато преместих всички бази от един MySQL на друг(под всички се разбира и mysql базата) при стартиране или рестартиране дава следната грешка:

Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..
# ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

Това се дължи на различни пароли т.е.  има два варианта

1. да се промени паролата с нова:
1.1 Файл /etc/mysql/debian.cnf
password = НОВА ПАРОЛА

1.2
# mysql -u root -p

mysql>GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'НОВА ПАРОЛА' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;

1.3 /etc/init.d/mysql restart

2. да се добави паролата на предишния mysql server
2.1 Файл /etc/mysql/debian.cnf
password = ПАРОЛАТА ОТ ПРЕДИШНИЯ MySQL СЪРВЪР

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Инсталиране на MegaRAID Storage Manager за "Supermicro AOC-SAS2LP-H8iR" под Debian

"LSI MegaRAID SAS PCI Express ROMB (Bus 5,Dev 0)"

apt-get update && apt-get install unzip alien libstdc++5 lib64stdc++6 libxerces-c28 sun-java6-jre

cd /tmp/;
wget ftp://ftp.supermicro.com/driver/SAS/LSI/2108/MSM/Linux/9.00-00/9.00-00.zip
unzip 9.00-00.zip;
cd MSM_linux_installer-9.00-00/disk;
alien -k --scripts MegaRAID_Storage_Manager-9.00-00.noarch.rpm
dpkg -i megaraid-storage-manager_9.00-00_all.deb

Проверка дали услугата mrmonitor е пусната
/etc/init.d/mrmonitor status
както и услугата vivaldiframeworkd
/etc/init.d/vivaldiframeworkd status

Ако не са стартирани ги стартирайте ръчно:
/etc/init.d/mrmonitor start
/etc/init.d/vivaldiframeworkd start

Сега остава да се стартира графичното приложение:

"/usr/local/MegaRAID Storage Manager/startupui.sh"

Необходимо е да се смени на IP Address: 127.0.0.1" и да се въведе за потребител "root" и системната "root" парола.

Допълнителни бележки:

При мен имаше един проблем, че при опит за стартиарне на mrmonitor той не се стартираше защото нямаше следната библиотека "ibxerces-c.so.28" т.е. даваше следната грешка:

/usr/local/bin/mrmonitord
/usr/local/bin/mrmonitord: error while loading shared libraries: libxerces-c.so.28: cannot open shared object file: No such file or directory

Необходимо е да се инсталира библиотеката

apt-get install libxerces-c28

След това се стартира

ldd /usr/local/bin/mrmonitord

linux-gate.so.1 =>  (0xf77b6000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xf77a4000)
librt.so.1 => /lib/i686/cmov/librt.so.1 (0xf779b000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xf7781000)
libxerces-c.so.28 => /usr/lib/libxerces-c.so.28 (0xf73bb000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xf72c6000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xf72a0000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf7293000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xf714c000)
/lib/ld-linux.so.2 (0xf77b7000)
libicuuc.so.44 => /usr/lib/libicuuc.so.44 (0xf7012000)
libicudata.so.44 => /usr/lib/libicudata.so.44 (0xf61d4000)

От тук се вижда дали всички необходими библиотеки са налични, ако не са трябва да се инсталират. Ако покаже резултат като горния значи всичкое наред.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Federated storage engine . Какво представлява и как се активира

Машината за съхранение FEDERATED е нововъдена в MySQL 5 . Тя позволява на сървъра да използва таблици от други сървъри на MySQL и да ги прави достъпни за клиентите му, все едно, че са негови. Не е необходимо клиентските програми да се свързват директно с другите сървъри, за да получат достъп до таблиците им.

Едно от основните и предимства е, че позволява използването само на една заявка за достъп до таблици, които се управляват от различни сървъри. Не е необходмо свързването с всеки от тях и извличане на данните поотделно. Например може да се направи съединение между таблици от различни сървъри. Машината за съхранение FEDERATED е нова и трябва да се направят още много стъпки за оптимизирането на такива заявки, но самият факт, че и сега модат да се подават е заначително постижение.

FEDERATED служи за управление на таблици, които имат следните характеристики:

1. Всяка таблица от тип FEDERATED е представена на твърдия диск само от форматен файл с разширение frm в директоряита на базата данни.

2. FEDERATED не поддържа транзакции

3. Машината за съхранение поддържа конструкциите SELECT , DELETE , UPDATE и INSERT .
4. MySQL не заключва таблиците от тип FEDERATED по никакъв начин.
О щях да забравя за същността на публикацията.
Добавя се следния ред в /etc/mysql/my.cnf в секция [mysqld]:

[mysqld]
federated

много сложно беше :)

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Активиране на event_scheduler в MySQL

За се провери дали вече не е активиран event_scheduler -- a се изпълнява:

show processlist

Ако не се види това:

Id: 1
User: event_scheduler
Host: localhost
db: NULL
Command: Daemon
Time: 8
State: Waiting on empty queue
Info: NULL

Следователно не е активирано :)). Активира се така:

/etc/mysql/my.cnf
event_scheduler = on

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Crontab -- Често използвани стойности

Няма да обяснявам какво е crontab и т.н. ,а просто ще дам примери които се добавят във /etc/crontab

#Стартира се през интервал от 15 минути от потребител: root

*/15  * * * * root /sbin/script.sh

#Стартиране на всеки кръгъл час от потребител: root

0 * * * * root /script/script.sh

#Всяка вечер във 22 часа се стартира този файл от потребител: www-data

0 22 * * * www-data php5 /var/www/script.php

#Стартира /sbin/scriptche.sh в следните времена, 2:15, 8:15, 13:15, 10:15, 23:15 с потребител: root

15 2,8,13,10,23  * * * root /sbin/scriptche.sh

PS: Специално за един приятел които изтърпя глупостите които говорих днес. Thx Dr***

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Mysql Cluster 7.1 -- Инсталиране, Конфигуриране, Използване, Debug-ване, Performance и още- Бележки

#####################################################################
################# 1. Инсталиране на NODE  ###########################
#####################################################################

groupadd mysql;
useradd -g mysql mysql;

cd /var/tmp/;

wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.1/mysql-cluster-gpl-7.1.15-linux-i686-glibc23.tar.gz/from/http://mysql.mirrors.ovh.net/ftp.mysql.com/ -O mysql-cluster-gpl-7.1.15-linux-i686-glibc23.tar.gz;

tar -C /usr/local -xzvf mysql-cluster-gpl-7.1.15-linux-i686-glibc23.tar.gz;

ln -s /usr/local/mysql-cluster-gpl-7.1.15-linux-i686-glibc23/ /usr/local/mysql;
export PATH=$PATH:/usr/local/mysql/bin;
echo "export PATH=\$PATH:/usr/local/mysql/bin" >> /etc/bash.bashrc;

cd /usr/local/mysql;

./scripts/mysql_install_db --user=mysql;

chown -R root .;
chown -R mysql data;
chgrp -R mysql .;

cp support-files/mysql.server /etc/init.d/mysql;
chmod +x /etc/init.d/mysql;
update-rc.d mysql defaults;

########################################################################
################# 2. Инсталиране на MANAGER  ###########################
########################################################################

cd /var/tmp/;

wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.1/mysql-cluster-gpl-7.1.15-linux-i686-glibc23.tar.gz/from/http://mysql.mirrors.ovh.net/ftp.mysql.com/ -O mysql-cluster-gpl-7.1.15-linux-i686-glibc23.tar.gz

tar zxvf mysql-cluster-gpl-7.1.15-linux-i686-glibc23.tar.gz;

cp -Rvp /var/tmp/mysql-cluster-gpl-7.1.15-linux-i686-glibc23/bin/ndb_mgm* /usr/local/bin;

chmod +x /usr/local/bin/ndb_mgm*;

##################################№№######################################
################# 3. Конфигуриране на MANAGER  ###########################
####################################№№####################################

mkdir /var/lib/mysql-cluster;
vi /var/lib/mysql-cluster/config.ini;

[ndbd default]

NoOfReplicas=2

DataMemory=80M

IndexMemory=18M

[tcp default]

[ndb_mgmd]

hostname=192.193.194.2 # Hostname or IP address of MGM node

datadir=/var/lib/mysql-cluster # Directory for MGM node log files

[ndbd]

hostname=192.193.194.3 # Hostname or IP address

datadir=/usr/local/mysql/data # Directory for this data node’s data files

[ndbd]

hostname=192.193.194.4 # Hostname or IP address

datadir=/usr/local/mysql/data # Directory for this data node’s data files

[mysqld]

hostname=192.193.194.3 # Hostname or IP address

[mysqld]

hostname=192.193.194.4 # Hostname or IP address

##################################№№######################################
################# 4. Конфигуриране на NODE     ###########################
####################################№№####################################
mkdir /var/run/mysqld/
chown -R mysql.mysql /var/run/mysqld/

vi /etc/my.cnf

[client]

port = 3306

socket = /var/run/mysqld/mysqld.sock

[mysqld]

port = 3306

socket = /var/run/mysqld/mysqld.sock

skip-locking

ndbcluster # run NDB storage engine

ndb-connectstring=192.193.194.2 # location of management server

#general_log_file        = /var/log/mysql.log
#general_log             = 1

[mysql_cluster]

ndb-connectstring=192.193.194.2 # location of management server

touch /var/log/mysql.log;chown -R mysql.adm mysql.log;

#За нова инсталация на mysql
mysqladmin -uroot password mysqlpass

#За стара инсталация на MySQL
#mysqladmin -u root -p'oldpassword' password newpass

##################################№№###########################################
################# 5. Стартиране на MySQL Cluster    ###########################
####################################№№#########################################

5.1. Стартира се на MySQL Manager
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster

5.2. Стартира се на всеки MySQL Node
/usr/local/mysql/bin/ndbd;
/etc/init.d/mysql start;

##################################№№###########################################
################# 6. Тестване на MySQL Cluster      ###########################
####################################№№#########################################
mysql -uroot
create database testdb;
use testdb;
CREATE TABLE cluster_test (i INT) ENGINE=NDBCLUSTER;
INSERT INTO cluster_test (i) VALUES (1);
SELECT * FROM cluster_test;

##################################№№###########################################
################# 7. Инсталиране на MySQL Balancer  ###########################
####################################№№#########################################

7.1. На всеки Node
mysql>
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'remoterootamri1proxypass' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Тестване
mysql -uroot -h192.193.194.5 -premoterootamri1proxypass

7.2. На всеки Load balancer
## Вариант -> mysql-proxy

apt-get install mysql-proxy

vim /etc/default/mysql-proxy

ENABLED="true"
OPTIONS="
--proxy-backend-addresses=192.193.194.3:3306 \
--proxy-backend-addresses=192.193.194.4:3306 \
--daemon \
--admin-username=mysqlproxyadmin \
--admin-password=mysqlproxypass1
"

## Вариант -> haproxy
apt-get install haproxy

/etc/haproxy/haproxy.conf

global
log 127.0.0.1 daemon debug
stats socket /tmp/stats
maxconn 4096
pidfile /var/run/haproxy.pid
daemon

defaults
log global
mode tcp
option dontlognull retries 3 option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000

listen MySQL 192.193.194.2:4040
mode tcp
option httpchk
#stats enable
#stats uri /haproxy-stats
balance roundrobin

#server mysql_master 192.193.194.3:3306
#server mysql_slave 192.193.194.4:3306

server ns1 192.193.194.3:3306 weight 10
server mail 192.193.194.4:3306 weight 10

listen stats 192.193.194.2:8000
mode http
option httpclose
balance roundrobin

stats uri     /haproxy
stats realm   Haproxy\ Statistics
stats auth    user:password

7.3. Тестване на mysql-proxy
mysql -uroot -h127.0.0.1 -P 4040 -premoterootamri1proxypass

mysql -uroot -h192.193.194.2 -P 4040 -premoterootamri1proxypass

mysql -usocial_network -h192.193.194.2 -P 4040 -pmysqlpassword

##################################№№###########################################
################# 8. Грешки при инсталиране         ###########################
####################################№№#########################################

При инсталиране на NODE

# ./scripts/mysql_install_db --user=mysql;

FATAL ERROR: Could not find mysqld

The following directories were searched:

/usr/libexec
/usr/sbin
/usr/bin

If you compiled from source, you need to run 'make install' to
copy the software into the correct location ready for operation.

If you are using a binary release, you must either be at the top
level of the extracted archive, or pass the --basedir option
pointing to that location.

Решение: rm -fr /etc/mysql

-----------------
/var/lib/mysql-cluster/ndb_1_cluster.log

2011-07-19 12:18:51 [MgmtSrvr] WARNING  --- 1011 Unable to connect with connect string: nodeid=0,localhost:1186
2011-07-19 12:18:51 [MgmtSrvr] ERROR    --- Failed to connect to ourself!

Решение:

Във файл /etc/hosts се добавя следния ред:

127.0.0.1 localhost

---------------------
mysql> create database testdb;
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> show warnings;
+-------+------+---------------------------------------------------------------------------------+
| Level | Code | Message                                                                         |
+-------+------+---------------------------------------------------------------------------------+
| Error | 1296 | Got error 4009 'Cluster Failure' from NDB. Could not acquire global schema lock |
+-------+------+---------------------------------------------------------------------------------+

ИЛИ

mysql> CREATE TABLE cluster_test (i INT) ENGINE=NDBCLUSTER;
ERROR 157 (HY000): Could not connect to storage engine

Решение: да се рестартират услугите ndbd и mysql и да се изчакат няколко секунди за да се синхронизират услугите
----------------------------------
mysql> select * from a10_articles limit 1;
ERROR 1296 (HY000): Got error 157 'Unknown error code' from NDBCLUSTER
mysql> show warnings;
+-------+------+--------------------------------------------------------------------+
| Level | Code | Message                                                            |
+-------+------+--------------------------------------------------------------------+
| Error | 1296 | Got error 4009 'Cluster Failure' from NDB                          |
| Error | 1296 | Got error 157 'Unknown error code' from NDBCLUSTER                 |
| Error | 1033 | Incorrect information in file: './social_network/a10_articles.frm' |
+-------+------+--------------------------------------------------------------------+
3 rows in set (0.00 sec)

Проблема е, че е стартиран ndbd без mysql
----------------------------------
ns1:/tmp# mysql -uroot social_network < social_network_filled.sql
ERROR 1005 (HY000) at line 1188: Can't create table 'social_network.a13_articles' (errno: 136)

В ndb_1_cluster.log лога се вижда следното

2011-07-19 13:14:24 [MgmtSrvr] INFO     --- Node 2: index-build table 218 index: 225 processed 0 rows
2011-07-19 13:14:24 [MgmtSrvr] INFO     --- Node 3: index-build table 218 index: 225 processed 0 rows

perror 136
В превод това означава: MySQL error code 136: No more room in index file

-------------------------
mysql> show warnings;
+-------+------+---------------------------------------------------------------------------------+
| Level | Code | Message                                                                         |
+-------+------+---------------------------------------------------------------------------------+
| Error | 1296 | Got error 4009 'Cluster Failure' from NDB. Could not acquire global schema lock |
| Error | 1296 | Got error 4009 'Cluster Failure' from NDB                                       |
+-------+------+---------------------------------------------------------------------------------+
пуснах с ndbd --initial всичките нодове и се оправи, но се затри всичко!
-------------------
ERROR 1114 (HY000) at line 402: The table 'a10_users' is full

##################################№№###########################################
################# 9. Бележки при използването на клъстера  ####################
####################################№№#########################################
Използване на аргумент --initial
/usr/local/mysql/bin/ndbd --initial ;
Само при първоначалното стартиране е добре да се ползва --initial защото това изтрива всички логове и бази данни от клъсетера

# Добавяне на потребител (На всеки нод)
#!/bin/bash
mysqlpassword="mysqlpassword";
mysql -e "CREATE DATABASE ads_network" -p;
mysql -e "GRANT ALL ON ads_network.* TO ads_network@'%' IDENTIFIED BY '$mysqlpassword' WITH GRANT OPTION;" -p
mysql -e "FLUSH PRIVILEGES;" -p;

# Рестартиране на manager-a
killall -15 ndb_mgmd;ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster --nodaemon;
При всяка промяна на конфигурационния файл "config.ini" е необходимо при изпълнението на ndb_mgmd да се добави и аргумент "--reload" т.е.

killall -15 ndb_mgmd;ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster --reload

# Рестартиране на node-a

killall -15 ndbd;/etc/init.d/mysql stop;/usr/local/mysql/bin/ndbd;/etc/init.d/mysql start;

При изпълнение на "ndb_show_tables" дава следната грешка:

Configuration error: Error : Could not alloc node id at 192.193.194.2 port 1186: No free node id found for mysqld(API).
Unable to connect to management server.

NDBT_ProgramExit: 1 -- Failed

Решение: няма достатъчно API Слотове
config.ini
[mysqld]
[mysqld]

Рестартиране , Спиране и Стартиране на node от ndb_mgm
2 restart -- Рестартира node 2
2 start -- Стартира node 2
2 stop -- Спира node 2

------------
ИЗПОЛЗВАНЕ НА DISK METHOD за клъстериране

SELECT * FROM INFORMATION_SCHEMA.FILES \G

select file_name, free_extents, total_extents from information_schema.files where file_type='datafile';

CREATE LOGFILE GROUP lgroup_ads
ADD UNDOFILE 'undo_lgroup_ads.dat'
INITIAL_SIZE 16M
UNDO_BUFFER_SIZE 2M
ENGINE NDB;

CREATE TABLESPACE ts_ads_network
ADD DATAFILE 'data_ads_network.dat'
USE LOGFILE GROUP lgroup
INITIAL_SIZE 32M
ENGINE NDB;

CREATE LOGFILE GROUP lgroup
ADD UNDOFILE 'undo_lgroup_1.dat'
INITIAL_SIZE 2M
ENGINE NDB;

ALTER LOGFILE GROUP lgroup
ADD UNDOFILE 'undo_lgroup_3.dat'
INITIAL_SIZE 4000M
ENGINE NDB;

CREATE TABLESPACE ts_ads_network
ADD DATAFILE 'data_ads_network_1.dat'
USE LOGFILE GROUP lgroup
INITIAL_SIZE 20M
ENGINE NDB;

ALTER TABLESPACE ts_ads_network
ADD DATAFILE 'data_ads_network_3.dat'
INITIAL_SIZE 4000M
ENGINE NDB;

DROP database social_network;create database social_network;use social_network;
ALTER TABLESPACE ts_social_network DROP DATAFILE 'data_social_network.dat' ENGINE NDB;
ALTER TABLESPACE ts_social_network DROP DATAFILE 'data_social_network_2.dat' ENGINE NDB;

DROP TABLESPACE ts_social_network ENGINE NDB;
DROP LOGFILE GROUP lgroup ENGINE NDB;

drop table a10_articles;
ALTER TABLESPACE ts_ads_network DROP DATAFILE 'data_ads_network.dat' ENGINE NDB;
DROP TABLESPACE ts_ads_network ENGINE NDB;
DROP LOGFILE GROUP social_network ENGINE NDB;

-----------------
CREATE TABLE `articles` (
…..
) TABLESPACE ts_ads_network STORAGE DISK ENGINE NDB AUTO_INCREMENT=9573 DEFAULT CHARSET=utf8;

find $PWD -type f -exec sed -i 's/varchar(120)/varchar(200)/g' {} \;

find $PWD -type f -exec sed -i 's/ENGINE=MyISAM/TABLESPACE ts_ads_network STORAGE DISK ENGINE NDB/g' {} \;

##################################№№###########################################
################# 10. Debug при използването на клъстера  №####################
####################################№№#########################################
/usr/local/mysql/bin/ndb_config --configinfo | grep -C 3 Index

/usr/local/mysql/bin/ndb_config --configinfo --config-file=/var/lib/mysql-cluster/config.ini|grep -C3 MaxNoOfTables

/usr/local/mysql/bin/ndb_config  --type ndbd -q Id,MaxNoOfOrderedIndexes,MaxNoOfUniqueHashIndexes -r '\n'

ndb_show_tables | grep -c OrderedIndex

ndb_mgm> ALL REPORT MEMORY
Connected to Management Server at: 192.193.194.2:1186
Node 2: Data usage is 25%(665 32K pages of total 2560)
Node 2: Index usage is 15%(370 8K pages of total 2336)
Node 3: Data usage is 25%(665 32K pages of total 2560)
Node 3: Index usage is 15%(370 8K pages of total 2336)

Стартиране на ndb_mgmd с --nodaemon за да се debugwa всичко което идва към клъстера
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster --nodaemon;

ndb_mgm> ALL DUMP 1000;

# Виждат се фазите на стартиране на нода
ndb_mgm> all status;
Node 2: starting (Last completed phase 4) (mysql-5.1.56 ndb-7.1.15)
Node 3: started (mysql-5.1.56 ndb-7.1.15)

##################################№№###########################################
################# 11. Performance при използването на клъстера  ###############
####################################№№#########################################
Чрез ndb_size ще може да се изчисли необходимото пространство за обслужването на базата която ще бъде конвертирана към NDBCluster Engine.

При стартиране на ndb_size.pl дава следната грешка:

perl /usr/local/mysql/bin/ndb_size.pl
Can't locate Class/MethodMaker.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at /usr/local/mysql/bin/ndb_size.pl line 58.
BEGIN failed--compilation aborted at /usr/local/mysql/bin/ndb_size.pl line 58.

Решението е:
apt-get install libclass-methodmaker-perl

Директна статистика в терминала
perl /usr/local/mysql/bin/ndb_size.pl --database=test --socket=/var/run/mysqld/mysqld.sock

Статистика в HTML файл
perl /usr/local/mysql/bin/ndb_size.pl social_network localhost root  > mysql_ndb_size_stat.html

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Ръчно сверяване на часовника под GNU/Linux

Ръчно въвеждане на дата 20.07.2011:

date +%Y%m%d -s "20110720"

Ръчно въвеждане на час 21:35:00:

date +%T -s "21:35:00"

 

Още по- лесен метод е този:

date -s "07/20/2011 21:35:00"

Друг лесен метод е(най- предпочитаният за мен) (Става ясно кое какво е):

date 072021412011.55

Извеждане стойността на хардуерния часовник:

hwclock --show
Mon 12 Mar 2012 11:43:19 PM EET  -0.969038 seconds

Синхронизация на системния часовник с хардуерния:

hwclock --systohc

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Личен Блог на Мартин Петров