显示标签为“replication”的博文。显示所有博文
显示标签为“replication”的博文。显示所有博文

2019年6月17日星期一

MySQL組複製

所以MySQL的組複製出來了MySQL 5.7。 現在已經有一段時間了,人們開始更多地詢問它。
下面是一個如何設置它的例子和一些痛點的例子,因為我用它來探討。
我使用三個不同的服務器,

服務器CENTOSA

mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.02 sec)

vi my.cnf
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE

log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE

transaction_write_set_extraction=XXHASH64
group_replication_group_name="90d8b7c8-5ce1-490e-a448-9c8d176b54a8"
group_replication_start_on_boot=off
group_replication_local_address= "192.168.111.17:33061"
group_replication_group_seeds= "192.168.111.17:33061,192.168.111.89:33061,192.168.111.124:33061"
group_replication_bootstrap_group=off

mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER repl@'%' IDENTIFIED BY 'replpassword';
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;


CHANGE MASTER TO
MASTER_USER='repl',
MASTER_PASSWORD='replpassword'
FOR CHANNEL 'group_replication_recovery';


mysql> SET GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)


mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (3.11 sec)


mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)


mysql> SELECT * FROM performance_schema.replication_group_members \G

*************************** 1. row ***************************
CHANNEL_NAME: group_replication_applier
MEMBER_ID: 1ab30239-5ef6-11e9-9b4a-08002712f4b1
MEMBER_HOST: centosa
MEMBER_PORT: 3306
MEMBER_STATE: ONLINE
MEMBER_ROLE: PRIMARY
MEMBER_VERSION: 8.0.15
所以現在我們可以添加更多服務器。
服務器CENTOSB

vi my.cnf
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
server_id=2
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE

log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE


transaction_write_set_extraction=XXHASH64
group_replication_group_name="90d8b7c8-5ce1-490e-a448-9c8d176b54a8"
group_replication_start_on_boot=off
group_replication_local_address= "192.168.111.89:33061"
group_replication_group_seeds= "192.168.111.17:33061,192.168.111.89:33061,192.168.111.124:33061"
group_replication_bootstrap_group=off

mysql> CHANGE MASTER TO
MASTER_USER='repl',
MASTER_PASSWORD='replpassword'
FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> CHANGE MASTER TO GET_MASTER_PUBLIC_KEY=1;
Query OK, 0 rows affected (0.02 sec)

mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (4.03 sec)

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 1ab30239-5ef6-11e9-9b4a-08002712f4b1 | centosa | 3306 | ONLINE | PRIMARY | 8.0.15 |
| group_replication_applier | 572ca2fa-5eff-11e9-8df9-08002712f4b1 | centosb | 3306 | RECOVERING | SECONDARY | 8.0.15 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
2 rows in set (0.00 sec)


服務器CENTOSC

vi my.cnf
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
server_id=3
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE

transaction_write_set_extraction=XXHASH64
group_replication_group_name="90d8b7c8-5ce1-490e-a448-9c8d176b54a8"
group_replication_start_on_boot=off
group_replication_local_address= "192.168.111.124:33061"
group_replication_group_seeds= "192.168.111.17:33061,192.168.111.89:33061,192.168.111.124:33061"
group_replication_bootstrap_group=off

mysql> CHANGE MASTER TO
-> MASTER_USER='repl',
-> MASTER_PASSWORD='replpassword'
-> FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> CHANGE MASTER TO GET_MASTER_PUBLIC_KEY=1;
Query OK, 0 rows affected (0.02 sec)

mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (3.58 sec)
mysql> SELECT * FROM performance_schema.replication_group_members \G
*************************** 1. row ***************************
CHANNEL_NAME: group_replication_applier
MEMBER_ID: 1ab30239-5ef6-11e9-9b4a-08002712f4b1
MEMBER_HOST: centosa
MEMBER_PORT: 3306
MEMBER_STATE: ONLINE
MEMBER_ROLE: PRIMARY
MEMBER_VERSION: 8.0.15

*************************** 2. row ***************************
CHANNEL_NAME: group_replication_applier
MEMBER_ID: 572ca2fa-5eff-11e9-8df9-08002712f4b1
MEMBER_HOST: centosb
MEMBER_PORT: 3306
MEMBER_STATE: ONLINE
MEMBER_ROLE: SECONDARY
MEMBER_VERSION: 8.0.15

*************************** 3. row ***************************
CHANNEL_NAME: group_replication_applier
MEMBER_ID: c5f3d1d2-8dd8-11e9-858d-08002773d1b6
MEMBER_HOST: centosc
MEMBER_PORT: 3306
MEMBER_STATE: ONLINE
MEMBER_ROLE: SECONDARY
MEMBER_VERSION: 8.0.15
3 rows in set (0.00 sec)


所以這一切都很棒,但並不總是意味著他們上網,他們通常可以坐在恢復模式。
到目前為止,我已經看到MySQL崩潰失敗,所以需要確保它穩定。
mysql> create database testcentosb;<br> ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement<br>
附註解決其中一些因素 -
mysql> START GROUP_REPLICATION;
ERROR 3094 (HY000): The START GROUP_REPLICATION command failed as the applier module failed to start.

mysql> reset slave all;
Query OK, 0 rows affected (0.03 sec)
- 然後從Change master命令重新開始
mysql> START GROUP_REPLICATION;
ERROR 3092 (HY000): The server is not configured properly to be an active member of the group. Please see more details on error log.

[ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error on opening a connection to 192.168.111.17:33061 on local port: 33061.'
[ERROR] [MY-011526] [Repl] Plugin group_replication reported: 'This member has more executed transactions than those present in the group. Local transactions: c5f3d1d2-8dd8-11e9-858d-08002773d1b6:1-4 >
[ERROR] [MY-011522] [Repl] Plugin group_replication reported: 'The member contains transactions not present in the group. The member will now exit the group.'

https://ronniethedba.wordpress.com/2017/04/22/this-member-has-more-executed-transactions-than-those-present-in-the-group/


[ERROR] [MY-011620] [Repl] Plugin group_replication reported: 'Fatal error during the recovery process of Group Replication. The server will leave the group.'
[ERROR] [MY-013173] [Repl] Plugin group_replication reported: 'The plugin encountered a critical error and will abort: Fatal error during execution of Group Replication'

SELECT * FROM performance_schema.replication_connection_status\G


我的想法...
請記住,可以在單主模式或多節點中設置組複製
mysql> select @@group_replication_single_primary_mode\G
*************************** 1. row ***************************
@@group_replication_single_primary_mode: 1

mysql> create database testcentosb;
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement
如果您寫入無主節點,您當然會收到錯誤。


group-replication-single-primary-mode = off < - 添加到cnf文件中。
mysql> SELECT * FROM performance_schema.replication_group_members;
+ --------------------------- + --------------------- ----------------- + ------------- ------------- + + ---- ---------- + ------------- + ---------------- +
| CHANNEL_NAME               | 會員ID                             | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+ --------------------------- + --------------------- ----------------- + ------------- ------------- + + ---- ---------- + ------------- + ---------------- +
| group_replication_applier | 1ab30239-5ef6-11e9-9b4a-08002712f4b1 | centosa     |         3306 | RECOVERING   |     | 8.0.15         |
| group_replication_applier | 572ca2fa-5eff-11e9-8df9-08002712f4b1 | centosb     |         3306 | 線上       |     | 8.0.15         |
| group_replication_applier | c5f3d1d2-8dd8-11e9-858d-08002773d1b6 | centosc     |         3306 | RECOVERING   |     | 8.0.15         |
+ --------------------------- + --------------------- ----------------- + ------------- ------------- + + ---- ---------- + ------------- + ---------------- +

3組(0.00秒)


現在,如果您使用Keepalived,MySQL路由器,ProxySQL等來處理您的流量,以便在發生故障轉移時自動翻轉。 當我停止主要時,我們可以從下面看到它立即失敗了。

mysql> SELECT * FROM performance_schema.replication_group_members ;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 1ab30239-5ef6-11e9-9b4a-08002712f4b1 | centosa | 3306 | ONLINE | PRIMARY | 8.0.15 |
| group_replication_applier | 572ca2fa-5eff-11e9-8df9-08002712f4b1 | centosb | 3306 | ONLINE | SECONDARY | 8.0.15 |
| group_replication_applier | c5f3d1d2-8dd8-11e9-858d-08002773d1b6 | centosc | 3306 | ONLINE | SECONDARY | 8.0.15 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
3 rows in set (0.00 sec)

[root@centosa]# systemctl stop mysqld

mysql> SELECT * FROM performance_schema.replication_group_members ;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 572ca2fa-5eff-11e9-8df9-08002712f4b1 | centosb | 3306 | ONLINE | PRIMARY | 8.0.15 |
| group_replication_applier | c5f3d1d2-8dd8-11e9-858d-08002773d1b6 | centosc | 3306 | ONLINE | SECONDARY | 8.0.15 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
2 rows in set (0.00 sec)

[root@centosa]# systemctl start mysqld
[root@centosa]# mysql
mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (3.34 sec)

mysql> SELECT * FROM performance_schema.replication_group_members ;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 1ab30239-5ef6-11e9-9b4a-08002712f4b1 | centosa | 3306 | RECOVERING | SECONDARY | 8.0.15 |
| group_replication_applier | 572ca2fa-5eff-11e9-8df9-08002712f4b1 | centosb | 3306 | ONLINE | PRIMARY | 8.0.15 |
| group_replication_applier | c5f3d1d2-8dd8-11e9-858d-08002773d1b6 | centosc | 3306 | ONLINE | SECONDARY | 8.0.15 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
3 rows in set (0.00 sec)


現在復蘇仍然是一個問題,因為它不會簡單地加入。 不得不再次審查所有帳戶和步驟,但我最終確實得到了它。

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 1ab30239-5ef6-11e9-9b4a-08002712f4b1 | centosa | 3306 | ONLINE | SECONDARY | 8.0.15 |
| group_replication_applier | 572ca2fa-5eff-11e9-8df9-08002712f4b1 | centosb | 3306 | ONLINE | PRIMARY | 8.0.15 |
| group_replication_applier | c5f3d1d2-8dd8-11e9-858d-08002773d1b6 | centosc | 3306 | ONLINE | SECONDARY | 8.0.15 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
3 rows in set (0.00 sec)


我需要對此進行更多測試,因為我還沒有100%銷售,因為我仍然傾向於Galera複製。

感興趣的URL


  • https://dev.mysql.com/doc/refman/8.0/en/group-replication.html
  • https://dev.mysql.com/doc/refman/8.0/en/group-replication-deploying-in-single-primary-mode.html
  • http://datacharmer.blogspot.com/2017/01/mysql-group-replication-vs-multi-source.html
  • https://dev.mysql.com/doc/refman/8.0/en/group-replication-launching.html
  • https://dev.mysql.com/doc/refman/8.0/en/group-replication-configuring-instances.html
  • https://dev.mysql.com/doc/refman/8.0/en/group-replication-adding-instances.html
  • https://ronniethedba.wordpress.com/2017/04/22/how-to-setup-mysql-group-replication/
  • https://www.digitalocean.com/community/tutorials/how-to-configure-mysql-group-replication-on-ubuntu-16-04
  • https://dev.mysql.com/doc/refman/8.0/en/group-replication-options.html#sysvar_group_replication_group_seeds
  • https://bugs.mysql.com/bug.php?id=90534
  • https://www.percona.com/blog/2017/02/24/battle-for-synchronous-replication-in-mysql-galera-vs-group-replication/
  • https://lefred.be/content/mysql-group-replication-is-sweet-but-can-be-sour-if-you-misunderstand-it/
  • https://www.youtube.com/watch?v=IfZK-Up03Mw
  • https://mysqlhighavailability.com/mysql-group-replication-a-quick-start-guide/
  • 2014年5月15日星期四

    http://anothermysqldba.blogspot.com/2014/05/a-look-at-mysql-57-dmr.html

    Original post: http://anothermysqldba.blogspot.com/2014/05/a-look-at-mysql-57-dmr.html

    所以我想它是關於時間我看著的MySQL 5.7。 這是一個高層次的概述,但我一直在尋找在MySQL的5.7簡而言之文件: 
    於是我開始用新鮮的Fedora 20(Xfce的)安裝。 
    總體來說,我會檢討,我發現好奇和有趣與MySQL 5.7的幾個項目。 果殼有很多信息,因此非常值得檢討。 

    我下載了MySQL的-5.7.4-M14-1.linux_glibc2.5.x86_64.rpm-bundle.tar 

    安裝,計劃做好以下 
    # tar -vxf MySQL-5.7.4-m14-1.linux_glibc2.5.x86_64.rpm-bundle.tar 
    # rm -f mysql-community-embedded* 
    ]# ls -a MySQL-*.rpm 
    MySQL-client-5.7.4_m14-1.linux_glibc2.5.x86_64.rpm 
    MySQL-embedded-5.7.4_m14-1.linux_glibc2.5.x86_64.rpm 
    MySQL-shared-5.7.4_m14-1.linux_glibc2.5.x86_64.rpm 
    MySQL-devel-5.7.4_m14-1.linux_glibc2.5.x86_64.rpm 
    MySQL-server-5.7.4_m14-1.linux_glibc2.5.x86_64.rpm 
    MySQL-test-5.7.4_m14-1.linux_glibc2.5.x86_64.rpm 
    # yum -y install MySQL-*.rpm 
    Complete! 

    雖然它說完整的我還注意到一個錯誤。 它應該還沒有完成安裝,如果它發現一個錯誤,但確定.... 
    FATAL ERROR: please install the following Perl modules before executing /usr/bin/mysql_install_db: 
    Data::Dumper 

    這個錯誤被證實.. 
    # /etc/init.d/mysql start 
    Starting MySQL............ ERROR! The server quit without updating PID file 
    # tail /var/lib/mysql/fedora20mysql57.localdomain.err 
    ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist 
    # /usr/bin/mysql_install_db 
    FATAL ERROR: please install the following Perl modules before executing /usr/bin/mysql_install_db: 
    Data::Dumper 
    # yum -y install perl-Data-Dumper 
    # /usr/bin/mysql_install_db 
    A RANDOM PASSWORD HAS BEEN SET FOR THE MySQL root USER ! 
    You will find that password in '/root/.mysql_secret'. 

    You must change that password on your first connect, 
    no other statement but 'SET PASSWORD' will be accepted. 
    # chown -R mysql:mysql /var/lib/mysql/mysql/ 
    # cat /root/.mysql_secret 
    # mysql -u root -p 
    mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepassword'); 
    Query OK, 0 rows affected (0.01 sec) 

    mysql> select @@version; 
    +-----------+ 
    | @@version | 
    +-----------+ 
    | 5.7.4-m14 | 
    +-----------+ 

    更健壯的程序升級等被記錄在這裡: 
    http://dev.mysql.com/doc/refman/5.7/en/upgrading-from-previous-series.html 
    檢查以確保你有GLIBC_2.15 如果您計劃在您的操作系統上安裝此。 

    行,所以現在,它被安裝,我們有什麼。 
    mysql> select User , Host,plugin from mysql.user \G 
    *************************** 1. row *************************** 
    User: root 
    Host: localhost 
    plugin : mysql_native_password 
    mysql> show databases; 
    +--------------------+ 
    | Database | 
    +--------------------+ 
    | information_schema | 
    | mysql | 
    | performance_schema | 
    +--------------------+ 
    mysql> SELECT @@default_password_lifetime \G 
    *************************** 1. row *************************** 
    @@default_password_lifetime: 360 

    這些都是姍姍來遲的改進,並感謝大家的改進。 
    所以現在來看看,在休息,我們至少需要某種形式的數據和架構。 因此,我將安裝世界數據庫測試。 
    # wget http://downloads.mysql.com/docs/world_innodb.sql.gz 
    # gzip -d world_innodb.sql.gz 
    # mysql -u root -p -e "create database world"; 
    # mysql -u root -p world < world_innodb.sql 
    # mysql -u root -p world 
    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> ALTER TABLE City ALGORITHM=INPLACE, RENAME KEY CountryCode TO THECountryCode; 
    Query OK
     
    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 ` THECountryCode ` (`CountryCode`), 
    CONSTRAINT `city_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES `Country` (`Code`) 
    ) ENGINE=InnoDB 

    mysql> DROP TABLE test.no_such_table; 
    ERROR 1051 (42S02): Unknown table 'test.no_such_table' 
    mysql> GET DIAGNOSTICS CONDITION 1 @p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT; 
    Query OK, 0 rows affected (0.45 sec) 

    mysql> SELECT @p1, @p2 \G 
    *************************** 1. row *************************** 
    @p1: 42S02 
    @p2: Unknown table 'test.no_such_table' 
    1 row in set (0.01 sec)
    • 觸發器 
      觸發器的限制已經解除和多個觸發器是允許的。 請參閱文檔,因為他們給一個很好的例子。 我將演示它的一些在這裡只是為了顯示在一個表上的多個觸發器是可能的。
    mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2)); 
    mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount; 
    mysql> SET @sum = 0; 
    mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00); 
    SELECT @sum AS 'Total amount inserted'; 
    +-----------------------+ 
    | Total amount inserted | 
    +-----------------------+ 
    | 1852.48 | 
    +-----------------------+
     
    mysql> CREATE TRIGGER ins_transaction BEFORE INSERT ON account 
    -> FOR EACH ROW PRECEDES ins_sum 
    -> SET 
    -> @deposits = @deposits + IF(NEW.amount>0,NEW.amount,0), 
    -> @withdrawals = @withdrawals + IF(NEW.amount<0,-NEW.amount,0);
     
    mysql> SHOW triggers \G 
    *************************** 1. row *************************** 
    Trigger: ins_transaction 
    Event: INSERT 
    Table: account 
    Statement: SET 
    @deposits = @deposits + IF(NEW.amount>0,NEW.amount,0), 
    @withdrawals = @withdrawals + IF(NEW.amount<0,-NEW.amount,0) 
    Timing: BEFORE 
    Created: 2014-05-14 21:23:49.66 
    sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION 
    Definer: root@localhost 
    character_set_client: utf8 
    collation_connection: utf8_general_ci 
    Database Collation: latin1_swedish_ci 
    *************************** 2. row *************************** 
    Trigger: ins_sum 
    Event: INSERT 
    Table: account 
    Statement: SET @sum = @sum + NEW.amount 
    Timing: BEFORE 
    Created: 2014-05-14 21:22:47.91 
    sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION 
    Definer: root@localhost 
    character_set_client: utf8 
    collation_connection: utf8_general_ci 
    Database Collation: latin1_swedish_ci
    mysql> CREATE TABLE t1 
    -> ( c1 CHAR(10) CHARACTER SET latin1 
    -> ) DEFAULT CHARACTER SET gb18030 COLLATE gb18030_chinese_ci ; 
    Query OK 
    mysql> HANDLER City OPEN AS city_handle; 
    mysql> HANDLER city_handle READ FIRST; 
    +----+-------+-------------+----------+------------+ 
    | ID | Name | CountryCode | District | Population | 
    +----+-------+-------------+----------+------------+ 
    | 1 | Kabul | AFG | Kabol | 1780000 | 
    +----+-------+-------------+----------+------------+
     
    mysql> HANDLER city_handle READ NEXT LIMIT 3; 
    +----+-----------+-------------+---------------+------------+ 
    | ID | Name | CountryCode | District | Population | 
    +----+-----------+-------------+---------------+------------+ 
    | 5 | Amsterdam | NLD | Noord-Holland | 731200 | 
    | 6 | Rotterdam | NLD | Zuid-Holland | 593321 | 
    | 7 | Haag | NLD | Zuid-Holland | 440900 | 
    +----+-----------+-------------+---------------+------------+
     
    mysql> CREATE TABLE `t2` ( 
    -> `t2_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    -> `inserttimestamp` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    -> `somevalue` int(10) unsigned DEFAULT NULL, 
    -> `rowLastUpdateTime` datetime DEFAULT NULL, 
    -> PRIMARY KEY (`t2_id`,`inserttimestamp`) 
    -> ) ENGINE=InnoDB;
     
    mysql> ALTER TABLE t2 
    -> PARTITION BY RANGE ( TO_DAYS(inserttimestamp) ) ( 
    -> PARTITION Jan2014 VALUES LESS THAN (TO_DAYS('2014-02-01')), 
    -> PARTITION Feb2014 VALUES LESS THAN (TO_DAYS('2014-03-01')), 
    -> PARTITION Mar2014 VALUES LESS THAN (TO_DAYS('2014-04-01')), 
    -> PARTITION Apr2014 VALUES LESS THAN (TO_DAYS('2014-05-01')), 
    -> PARTITION May2014 VALUES LESS THAN (TO_DAYS('2014-06-01')), 
    -> PARTITION Jun2014 VALUES LESS THAN (TO_DAYS('2014-07-01')), 
    -> PARTITION Jul2014 VALUES LESS THAN (TO_DAYS('2014-08-01')), 
    -> PARTITION Aug2014 VALUES LESS THAN (TO_DAYS('2014-09-01')), 
    -> PARTITION Sep2014 VALUES LESS THAN (TO_DAYS('2014-10-01')), 
    -> PARTITION Oct2014 VALUES LESS THAN (TO_DAYS('2014-11-01')), 
    -> PARTITION Nov2014 VALUES LESS THAN (TO_DAYS('2014-12-01')), 
    -> PARTITION Dec2014 VALUES LESS THAN (TO_DAYS('2015-01-01')), 
    -> PARTITION Jan2015 VALUES LESS THAN (TO_DAYS('2015-02-01')) 
    -> );
     
    mysql> INSERT INTO t2 VALUES (NULL,NOW(),1,NOW()); 
    mysql> HANDLER t2 OPEN AS t_handle; 
    mysql> HANDLER t_handle READ FIRST; 
    +-------+---------------------+-----------+---------------------+ 
    | t2_id | inserttimestamp | somevalue | rowLastUpdateTime | 
    +-------+---------------------+-----------+---------------------+ 
    | 1 | 2014-05-14 21:53:28 | 1 | 2014-05-14 21:53:28 | 
    +-------+---------------------+-----------+---------------------+ 
    mysql> select @@binlog_format\G 
    *************************** 1. row *************************** 
    @@binlog_format: ROW
     

    # mysqlbinlog --database=world mysql-bin.000002 | grep world | wc -l 
    22543# mysqlbinlog --rewrite-db='world->renameddb' mysql-bin.000002 | grep renameddb | wc -l 
    22542

    2014年1月20日星期一

    能MySQL複製趕上

    Original post: http://anothermysqldba.blogspot.com/2014/01/can-mysql-replication-catch-up.html

    因此,複製在MySQL 5.6,最近改善。 然而,人們還在使用5.1和5.5等等一些這些改進將不得不等待打真實的世界。

    我最近幫助朝這個方向與地理定位的複製解決方案。 該國的一部分有一個MySQL 5.1服務器和該國的其他部分都安裝一個新的MySQL 5.6服務器。

    處理獲得從初級到輔助服務器的初始數據備份的問題後(花了幾個小時,至少可以說),我必須決定可以複寫趕上並跟上。 主服務器有一些大的查詢和優化始終是一個良好的開端。 我不得不在輔助服務器拉和應用一樣快,我能先雖然。

    因此,這裡有一些事情要檢查並記住,當涉及到複製。 我已經添加了下面一些幫助鏈接支持我的想法,因為我的工作了。

    複製可以是I / O非常沉重。 根據您的應用程序。 一個博客網站沒有那麼多寫這樣的複製I / O是輕,但大量寫入和更新主服務器會導致複製服務器編寫大量relay_logs和binary_logs,如果他們被啟用。 可以在二級啟用二進制日誌允許您運行備份,或者您可能希望此服務器是主給他人。

    我分裂登錄到從數據目錄不同的數據分區。
    這是設置在my.cnf文件-中繼日誌

    InnoDB的緩衝池已被設置為一個值超過10GB。 這是很多這個服務器。
    服務器背後仍然超過90,000秒。

    所以,我開始做一些調整到服務器,並最終結束了與這些設置。 授予每個服務器是不同的。

    的mysql> SELECT @ @ sync_relay_log_info \ G
    *************************** 1。 排***************************
    @ @ sync_relay_log_info:0
    1行中集(0.08秒)

    的mysql> SELECT @ @ 的innodb_flush_log_at_trx_commit \ G
    *************************** 1。 排***************************
    @ @的innodb_flush_log_at_trx_commit:2
    1行中集(0.00秒)

    的mysql> SELECT @ @ log_slave_updates \ G
    *************************** 1。 排***************************
    @ @ log_slave_updates:0

    的mysql> SELECT @ @ sync_binlog \ G
    *************************** 1。 排***************************
    @ @ sync_binlog:0
    1行中集(0.00秒)

    的mysql> SELECT @ @ max_relay_log_size \ G
    *************************** 1。 排***************************
    @ @ max_relay_log_size:268435456

    我打開二進制日誌關閉,因為我監視不同的設置和選項,以幫助複製迎頭趕上。 過了好一會兒。 你們當中有些人看到上面的設置可能會或可能不會被像我這樣的時間框架內工作應用。 然而,它沒有趕上為0秒回。 現在,你可能會注意到,很多這些設置與上面和周圍的二進制日誌。 於是我就一個小測試。 於是,我重新啟動並啟用的bin日誌。 我檢查了服務器上後,發現它10000 +秒落後。 所以,我再次重新啟動和禁用的bin日誌。 它趕上了(0秒在),在不到15分鐘的主服務器。 我用Aurimas“ 工具 ,因為我看著它趕上為好。 如果你以前沒有使用它,它是一個非常好的和方便的工具。

    這一切意味著什麼是主服務器必須是ACID兼容。 有了這個設置你也取決於操作系統的緩存上和清理。 這是服務器將被用​​來作為一個主要的讀取服務器信息反饋給他人。 這也意味著,是的,地理定位的複製可以保持最新與主服務器。

    如果你需要停止的奴隸,將它仍然趕上快?

    如何以及為什麼你停止奴隸是我的第一反應。 你應該養成使用的習慣, 停止從SQL_THREAD ,而不是停止從 ,這使得中繼日誌繼續收集數據,只是沒有把它應用到你的主服務器。 所以,如果你可以利用的,這將有助於減少需要為你以後填入中繼日誌的時間。

    一些額外的閱讀為您提供:

    2013年9月7日星期六

    MySQL的訪問和複製被secure_auth

    Original post: http://anothermysqldba.blogspot.com/2013/09/mysql-access-and-replication-blocked-by.html

    ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)

    如果你已經嘗試連接到MySQL數據庫,你會看到這個錯誤,那麼你需要有有效的41byte的哈希密碼。 如果您不確定您有執行下面的SQL。 如果你有16個字符的密碼,他們年紀大了密碼。

    select Password from mysql.user;

    下面是我解決了這個作為一個從MySQL 5.0遷移到MySQL 5.6的一部分。

    MySQL 5.0的服務器有一個上了年紀的預4.1密碼和有效41byte密碼的混合物。 因為在MySQL 5.0服務器有一些舊的密碼,我決定甩MySQL表的一部分設置複製的賬戶。 我所做的,除了mysql數據庫中的所有數據庫轉儲。 這可以保證,我會保持有效的MySQL 5.6表增強。

    MySQL 5.6的服務器上安裝容易了,我將轉儲裝載數據。 遷移的一部分是使用複製,而他們評估了新的數據庫。 雖然我測試了MySQL 5.6的服務器上複製用戶帳戶。 我得到的響應是在頁面的頂部的錯誤。 複製將無法運行,當然,沒有一個有效的用戶帳戶。 這是為什麼錯誤日誌給我這個錯誤:
    [ERROR] Slave I/O: error connecting to master '<user>@<hostname>:3306' - retry-time: 10 retries: 68, Error_code: 2049

    MySQL 5.0的服務器上的帳戶快速審查表明,建立了新帳戶前4.1密碼。 所以,我需要一個有效的41字節的密碼升級帳戶。

    下面的查詢表明,它們的確有啟用舊密碼。 所以,我必須停用,並再次更新用戶帳戶設置密碼,作為一個有效的41字節的散列。

    >SELECT @@session.old_passwords, @@global.old_passwords;
    +-------------------------+------------------------+
    | @@session.old_passwords | @@global.old_passwords |
    +-------------------------+------------------------+
    | 1 | 1 |
    +-------------------------+------------------------+
    1 row in set (0.00 sec)


    >SET @@session.old_passwords = 0;
    Query OK, 0 rows affected (0.00 sec)

    >GRANT REPLICATION SLAVE ON *.* TO '<user>'@'<ip_address>' IDENTIFIED BY '<Password>';
    Query OK, 0 rows affected (0.00 sec)

    密碼的檢查表明現在密碼為41byte的密碼。 我能夠從輔助服務器連接到主服務器和避免secure_auth錯誤。 複製連接方便,問題得到解決。

    展望未來,我需要得到的MySQL 5.0用戶帳戶上的MySQL 5.6服務器。 (因為我跳過作為建築輔助服務器的一部分。)

    客戶端需要再次為每個用戶設置的補助,不管有效密碼或。
    所以,我指示他們執行下面的SQL。 我可以做到這一點,但我需要知道他們的密碼,這是沒有必要的。

    對於每個用戶在他們的系統。 你不必做root用戶,因為你已經有了一個有效的根帳戶的5.6系統上。

    >SET @@session.old_passwords = 0;
    >show grants for '<User>'@'<Host>';
    為了收集需要為每個用戶運行下面的sql:
    SELECT CONCAT("SHOW GRANTS FOR '",User,"'@'",Host,"';") as sql_command from mysql.user;

    對於每個結果執行“展會補助”的語句,然後執行該語句。
    聲明應類似於以下內容:

    GRANT USAGE ON *.* TO 'bob'@'%.example.org' IDENTIFIED BY 'cleartext password';

    複製My​​SQL 5.6的服務器上創建和填充MySQL表。

    更可以在這裡找到:
    http://dev.mysql.com/doc/refman/5.6/en/password-hashing.html

    2013年8月10日星期六

    與Percona的Xtrabackup中創建另一台為Slave(次要的)服務器

    Original post: http://anothermysqldba.blogspot.com/2013/08/create-slave-secondary-server-with.html

    所以,第一你可能會只是保存自己一些時間,和讀取這方面的的Percona的的例子為:
    http://www.percona.com/doc/percona-xtrabackup/2.1/howtos/setting_up_replication.html

    但是,只是在區分大小寫這裡是一個例子基於上的一個真正的的形勢下的。

    Primary server(主服務器)

    # innobackupex /tmp/ <---- this is whatever directory you want to store the backup in. This is a very basic no fluff hot backup.

    InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
    .........
    130809 14:40:11 innobackupex: Connection to database server closed
    130809 14:40:11 innobackupex: completed OK!

    請請務必您請參閱的xtrabackup_binlog_info的的文件。 如果你不這樣做你會不會很容易地有的位置和日誌信息。 您將不得不,以挖成基於關於的時間和是比需要的的更多的工作,的等。其中的的的二進制日誌的。

    innobackupex --apply-log /tmp/<Timestamp Directory Here>

    現在高達給你。 您可以rsync的目錄到的從站或tar [gzip或],然後scp的向從屬。 無論的方法來移動到奴隸的如何的是,您有一個熱備份創建的的,並準備去。


    SECONDARY SERVER

    # /etc/init.d/mysql stop
    mv /var/lib/mysql /var/lib/mysql_ORIG

    然而,你搬到該文件從主設備到的奴隸,把其中的內容到對datadir的文件夾,假設為例如:的/ var / lib / mysql下目錄下。

    # chown -R mysql:mysql mysql
    /etc/init.d/mysql start
    Starting MySQL... [ OK ]

    現在,在您的的奴隸中的的MySQL服務器,你可以設置的複製用戶信息很容易。

    CHANGE MASTER TO
    MASTER_HOST='<MASTER_HOST>',
    MASTER_USER='<MASTER_USER>',
    MASTER_PASSWORD='<MASTER_PASSWORD>',
    MASTER_CONNECT_RETRY = 10 ;

    獲取該日誌的和位置從的xtrabackup文件中。

    # more xtrabackup_binlog_info
    <BinLog info> <POSITION INFO>

    CHANGE MASTER TO MASTER_LOG_FILE='<BinLog info>', MASTER_LOG_POS=<POSITION INFO>;

    Start slave;


    那就是它在一個概括地說。 欲了解更多信息中,檢討在開始時的Percona的的url給定的。

    2013年6月12日星期三

    MySQL < 5.5 replication to MySQL 5.6

    Original post: http://anothermysqldba.blogspot.com/2013/06/mysql-55-replication-to-mysql-56.html

    經過幾個小時的無奈..... 我會簡單地把它作為不升級到MySQL 5.6中,如果你正在運行任何版本的MySQL 5.5。 

    你必須升級到MySQL 5.5第一,保持你的理智和數據機智。 

    在MySQL 5.6中的密碼更改,並提供大量的博客文章和信息,我支持他們。 我什至更新的MySQL 5.6密碼盒子是運行得很好。 問題是複製。 我不得不從一個MySQL版本複製小於MySQL 5.5中,它根本不會運行。 我禁用secure_auth可以連接,但仍然沒有運氣與複製。 

    雖然我支持複製的升級路徑,走的時候,並堅持先與MySQL 5.5。 

    我結束了降級到MySQL 5.5,現在一切都運行得很好。 如果你有你的MySQL版本降級,我必須遵循相同的步驟,我在我的瑪麗亞diaster後箱體背部。

    2013年5月14日星期二

    MariaDB的10.0.2檢查

    Original post: http://anothermysqldba.blogspot.com/2013/05/checking-out-mariadb-1002.html


    我下載了MariaDB的10.0.2源碼包,並做了一個自定義安裝。 我這樣做是因為以前的帖子 ,我有2個已建成的主人。 這一次,我刪除的圓形複製他們指出這MariaDB的安裝。 我使用的端口3310。 剛才投入MariaDB的10.0.2文件夾相同的安裝配置的例子,從以前的帖子會在這裡適用。我在這篇文章的底部增加了安裝,以防萬一,你想要它。

    我之所以這樣做是因為我想檢查出的最新MariaDB的功能主要有以下幾種:
    多源複製

    確保你有不同的IDS服務器設置每台服務器開始。

    剛開始,所以沒有在這裡應該預期
    > select @@default_master_connection;
    +-----------------------------+
    | @@default_master_connection |
    +-----------------------------+
    | |
    +-----------------------------+ 

    因此,收集信息,從主服務器
    > show master status\G
    *************************** 1. row ***************************
    File: percona_mysql-bin.000005
    Position: 107 


    現在更新MariaDB的10.0.2從
    SET @@default_master_connection='percona';

    CHANGE MASTER 'percona' TO MASTER_HOST = '127.0.0.1',
    MASTER_USER = 'root',
    MASTER_PASSWORD = '',
    MASTER_PORT = 3307 ,
    MASTER_LOG_FILE = 'percona_mysql-bin.000005',
    MASTER_LOG_POS = 107 



    > select @@default_master_connection;
    +-----------------------------+
    | @@default_master_connection |
    +-----------------------------+
    | percona |
    +-----------------------------+

    OK現在讓我加第二個主
    SET @@default_master_connection='oracle';

    CHANGE MASTER 'oracle' TO MASTER_HOST = '127.0.0.1',
    MASTER_USER = 'root',
    MASTER_PASSWORD = '',
    MASTER_PORT = 3309 ,
    MASTER_LOG_FILE = 'oracle_mysql-bin.000009',
    MASTER_LOG_POS = 5453 


    接下來,您可以檢查狀態,以確保兩個設定都設了。
    >SHOW ALL SLAVES STATUS\G

    *************************** 1. row ***************************
    Connection_name: oracle
    Slave_SQL_State:
    Slave_IO_State:
    Master_Host: 127.0.0.1
    Master_User: root
    Master_Port: 3309
    Connect_Retry: 60
    Master_Log_File: oracle_mysql-bin.000009
    Read_Master_Log_Pos: 5453
    Relay_Log_File: relay-bin-oracle.000001
    Relay_Log_Pos: 4
    Relay_Master_Log_File: oracle_mysql-bin.000009
    Slave_IO_Running: No
    Slave_SQL_Running: No
    Last_Errno: 0
    Last_Error:
    Skip_Counter: 0
    Exec_Master_Log_Pos: 5453
    Relay_Log_Space: 248
    Until_Condition: None
    Until_Log_File:
    Until_Log_Pos: 0
    Master_SSL_Allowed: No
    Seconds_Behind_Master: NULL
    Master_SSL_Verify_Server_Cert: No
    Last_IO_Errno: 0
    Last_IO_Error:
    Last_SQL_Errno: 0
    Last_SQL_Error:
    Replicate_Ignore_Server_Ids:
    Master_Server_Id: 0
    Master_SSL_Crl:
    Master_SSL_Crlpath:
    Using_Gtid: 0
    Retried_transactions: 0
    Max_relay_log_size: 1073741824
    Executed_log_entries: 0
    Slave_received_heartbeats: 0
    Slave_heartbeat_period: 1800.000
    Gtid_Pos:
    *************************** 2. row ***************************
    Connection_name: percona
    Slave_SQL_State:
    Slave_IO_State:
    Master_Host: 127.0.0.1
    Master_User: root
    Master_Port: 3307
    Connect_Retry: 60
    Master_Log_File: percona_mysql-bin.000005
    Read_Master_Log_Pos: 107
    Relay_Log_File: relay-bin-percona.000001
    Relay_Log_Pos: 4
    Relay_Master_Log_File: percona_mysql-bin.000005
    Slave_IO_Running: No
    Slave_SQL_Running: No
    Last_Errno: 0
    Last_Error:
    Skip_Counter: 0
    Exec_Master_Log_Pos: 107
    Relay_Log_Space: 248
    Until_Condition: None
    Until_Log_File:
    Until_Log_Pos: 0
    Master_SSL_Allowed: No
    Seconds_Behind_Master: NULL
    Master_SSL_Verify_Server_Cert: No
    Last_IO_Errno: 0
    Last_IO_Error:
    Last_SQL_Errno: 0
    Last_SQL_Error:
    Replicate_Ignore_Server_Ids:
    Master_Server_Id: 0
    Master_SSL_Crl:
    Master_SSL_Crlpath:
    Using_Gtid: 0
    Retried_transactions: 0
    Max_relay_log_size: 1073741824
    Executed_log_entries: 0
    Slave_received_heartbeats: 0
    Slave_heartbeat_period: 1800.000
    Gtid_Pos: 

    確定的時間開始

    > START ALL SLAVES;
    Query OK, 0 rows affected, 2 warnings (0.00 sec)

    root@localhost [(none)]> show warnings;
    +-------+------+-------------------------+
    | Level | Code | Message |
    +-------+------+-------------------------+
    | Note | 1937 | SLAVE 'percona' started |
    | Note | 1937 | SLAVE 'oracle' started |
    +-------+------+-------------------------+ 



    Relay_Master_Log_File: percona_mysql-bin.000005
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    Relay_Master_Log_File: oracle_mysql-bin.000009
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes


    因此,讓我們測試一些情況。

    通過Percona的主
    use test;
    CREATE TABLE `multi_test` (
    `time_recorded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    ) ENGINE=InnoDB; 

    MariaDB的奴隸
    > show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | multi_test |
    +----------------+ 

    通過Oracle MySQL主
    use test;
    CREATE TABLE `multi_test2` (
    `time_recorded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    ) ENGINE=InnoDB; 

    MariaDB的奴隸
    > show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | multi_test |
    | multi_test2 |
    +----------------+ 

    確定工作!


    SHOW解釋
    這是相當直線前進,但因為它是運行很高興趕上查詢,。
    > show explain for 17;
    +------+-------------+--------+-------+---------------+---------+---------+------+------+-------------+
    | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
    +------+-------------+--------+-------+---------------+---------+---------+------+------+-------------+
    | 1 | SIMPLE | sbtest | range | PRIMARY | PRIMARY | 4 | NULL | 99 | Using where |
    +------+-------------+--------+-------+---------------+---------+---------+------+------+-------------+
    1 row in set, 1 warning (0.00 sec)

    root@localhost [test]> show warnings;
    +-------+------+----------------------------------------------------------+
    | Level | Code | Message |
    +-------+------+----------------------------------------------------------+
    | Note | 1003 | SELECT SUM(K) from sbtest where id between 4997 and 5096 |
    +-------+------+----------------------------------------------------------+ 


    便箋:


    Cassandra的存儲引擎
    我很好奇,關於這一點,它涉及如何通過memcache的NoSQL和Innodb的解決方案。
    我有一個後,在這裡: http://anothermysqldba.blogspot.com/2013/04/nosql-php-memcache-innodb-mysql.html

    我會回來的這一點,因為我在我的環境中成立卡桑德拉。 我並不渴望,但好奇。


    用戶反饋插件
    文檔“快速啟動”添加到下的my.cnf文件的[mysqld]
    [mysqld]
    feedback=ON
    port = 3310
    socket = /tmp/mariadb-10.0.2.sock

    130513 17:45:10 InnoDB: 10.0.2-MariaDB started; log sequence number 20183690
    130513 17:45:10 [ERROR] /usr/local/mariadb-10.0.2/bin/mysqld: unknown variable 'feedback=ON' 

    這個工作輕鬆了很多,想到這樣一旦我刪除了“快速啟動”的指示。
    > INSTALL PLUGIN feedback SONAME 'feedback.so';

    > SELECT plugin_status FROM information_schema.plugins WHERE plugin_name = 'feedback';
    +---------------+
    | plugin_status |
    +---------------+
    | ACTIVE |
    +---------------+ 


    通過錯誤日誌中,你也可以看到它的工作:

    [注意事項]反饋插件:發送報告'http://mariadb.org/feedback_plugin/post'
    [注]反饋插件:服務器回答說'OK'



    總體而言,我目前最喜歡的增強:



    基本安裝是這樣的:
    # Preconfiguration setup
    shell> groupadd mariadb
    shell> useradd -r -g mariadb mariadb

    # Beginning of source-build specific instructions
    shell> tar zxvf MariaDB-VERSION.tar.gz
    shell> cd MariaDB-VERSION
    shell> cmake .
    shell> make
    shell> make install DESTDIR="/usr/local/mariadb-10.0.2-tmp"
    # End of source-build specific instructions

    Build files have been written to: /usr/local/src/MySQL/MariaDB/10.0.2/mariadb-10.0.2

    I do not like the results
    -- Installing: /usr/local/mariadb-10.0.2-tmp/usr/local/mysql/
    If DESTDIR is should install into that location not start with user under that location. This is a MySQL original issue as it does this with all versions of MySQL.

    # Fix the odd/bug setup
    shell> cd /usr/local/mariadb-10.0.2-tmp
    shell> mv usr/local/mysql/ ../mariadb-10.0.2 ;
    shell> cd ../; # rm -Rf mariadb-10.0.2-tmp

    # Postinstallation setup
    shell> cd /usr/local/mariadb-10.0.2
    shell> chown -R mariadb .
    shell> chgrp -R mariadb .

    # Next command is optional
    shell> cp support-files/my-small.cnf /etc/mariadb-10.0.2.cnf
    shell> vi /etc/mariadb-10.0.2.cnf
    port = 3310
    socket = /tmp/mariadb-10.0.2.sock

    shell> scripts/mysql_install_db --defaults-file=/etc/mariadb-10.0.2.cnf --basedir=/usr/local/mariadb-10.0.2 --skip-name-resolve --datadir=/var/lib/mariadb-10.0.2 --user=mariadb
    shell> chown -R mariadb /var/lib/mariadb-10.0.2/*

    shell> # bin/mysqld_safe --defaults-file=/etc/mariadb-10.0.2.cnf --user=mariadb --datadir=/var/lib/mariadb-10.0.2/ --port=3310 &


    shell> # ./bin/mysql --port=3310 --socket=/tmp/mariadb-10.0.2.sock
    Welcome to the MariaDB monitor. Commands end with ; or \g.
    Your MariaDB connection id is 2
    Server version: 10.0.2-MariaDB Source distribution

    Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.