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を
インストールは、次の操作を行う上で計画された
それは完全な言っている間、私は、エラーに気づいた。 それは、エラーを見つけた場合は、インストールが終了しますが、[OK]をしていない必要があります....
このエラーは、確認された..
アップグレードやETC用より堅牢なプロセスがここに記載されています:
http://dev.mysql.com/doc/refman/5.7/en/upgrading-from-previous-series.html
あなたはGLIBC_2.15を持っているかどうかを確認してください あなたがお使いのOSでこれをインストールする場合。
[OKだから今、それがインストールされていることを、私たちは何がありますか。
これらはすべて、長年の懸案の改善であり、改善のためのあなたのすべてに感謝します。
だから今残りの部分を見て、我々は、少なくともデータとスキーマのいくつかの種類が欲しい。 だから私は、テストのための世界のデータベースをインストールします。
だから私は、新鮮で始めての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!
それは完全な言っている間、私は、エラーに気づいた。 それは、エラーを見つけた場合は、インストールが終了しますが、[OK]をしていない必要があります....
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 |
+-----------+
アップグレードやETC用より堅牢なプロセスがここに記載されています:
http://dev.mysql.com/doc/refman/5.7/en/upgrading-from-previous-series.html
あなたはGLIBC_2.15を持っているかどうかを確認してください あなたがお使いのOSでこれをインストールする場合。
[OKだから今、それがインストールされていることを、私たちは何がありますか。
- セキュリティの改善
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
InnoDB
の機能強化
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=InnoDBmysql> ALTER TABLE City ALGORITHM=COPY , CHANGE COLUMN Name Name VARCHAR(35);
mysql> show create table City;
CREATE TABLE `City` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(35) DEFAULT NULL,
`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=InnoDBmysql> ALTER TABLE City ALGORITHM=INPLACE , CHANGE COLUMN Name Name VARCHAR(255);
mysql> show create table City;
CREATE TABLE `City` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(255) DEFAULT NULL,
`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- InnoDBは、一時テーブルのメタデータは、もはやInnoDBのシステムテーブルに格納されません 。 最初の時にテーブルが作成され
SELECT
文がそれに対して実行されます。
mysql> select * from INNODB_TEMP_TABLE_INFO;mysql> show create table INNODB_TEMP_TABLE_INFO;
CREATE TEMPORARY TABLE `INNODB_TEMP_TABLE_INFO` (
`TABLE_ID` bigint(21) unsigned NOT NULL DEFAULT '0',
`NAME` varchar(202) DEFAULT NULL,
`N_COLS` int(11) unsigned NOT NULL DEFAULT '0',
`SPACE` int(11) unsigned NOT NULL DEFAULT '0',
`PER_TABLE_TABLESPACE` varchar(64) DEFAULT NULL,
`IS_COMPRESSED` varchar(64) DEFAULT NULL
) ENGINE=MEMORYCODE HERE
- InnoDBがMySQLにサポートされている空間データ型をサポートしています
- これは巨大です。 それは、人々は、MySQL上でPostgreSQLを選んだ理由の一つとなっているからです。
- http://www.oracle.com/us/corporate/press/2180737
- http://dev.mysql.com/doc/refman/5.7/en/mysql-spatial-datatypes.html
- http://dev.mysql.com/doc/refman/5.7/en/spatial-extensions.html
- http://www.mysqlperformanceblog.com/2013/10/21/using-the-new-spatial-functions-in-mysql-5-6-for-geo-enabled-applications/
mysql> select @@innodb_temp_data_file_path \G
*************************** 1. row ***************************
@@innodb_temp_data_file_path: ibtmp1:12M:autoextend- InnoDBは、一時テーブルのメタデータは、もはや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
- せずにレプリケーションマスタを変更する
STOP SLAVE
http://dev.mysql.com/doc/refman/5.7/en/change-master-to.html
Read more about this on via the two links above. This could be another very nice improvement. The documentation gives many examples.
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 |
+-------+---------------------+-----------+---------------------+
- mysqlbinlogにして書き換えたデータベース名
- によるデータベースの名前変更mysqlbinlogは
- これはPerconaは年齢のために持っていた機能です。
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