Apache,MariaDB&PHP pourundéveloppementlibre ChristopheVilleneuve @hellosct1
Qui...estChristopheVilleneuve? afuplemug.frmysqlmariadbdrupaldemoscenefirefoxosdrupagoraphptourforumphpsolutionlinuxdemoinparislibreàtoieyrolleseditionseniprogrammezlinuxpratiquewebriverphptvneuros elephpant
Lespointsd'aujourd'hui SituationdeMariaDB NotionsdebasesdeMariaDB Communiqueraveclesstoragesengines Lesdifférentespossibilités
Unehistoiresimple Datesimportantes L'origine Fondépar 19831èreidée Fondéen1995 MontyWidenius DavidAxmark 2008RachatparSun 2009SunrachetéparOracle 2007Préparationpour Nasdaq PromessedeOraclesur5 ans(fin2014)
Etmaintenant Denosjours...MySQL N 1danslemonde Forks 500kDownload(depuis 2003) +13Minstallationactive MySQLOracle Drizzle Percona MariaDB
MariaDB:unprojetmature Communauté d'amis 100% Open source et compatible MySQL Dec2008CréationdeMonty Program MontyWidenius Plateforme d'innovation MariaDB5.1(Fev2010) Des commiteurs MariaDB5.2(Nov2010) MariaDB5.3(Avril2012) MariaDB5.5(Avril2012) Google MariaDB10.0(Nov2012) Booking.com 2013Fondation Facebook MariaDB10.0.17(Mars15) Taobao.com MariaDB10.1.5(Juin15)
MariaDB10 Scalability Performance Availability NoSQL Operations Security Advanced parallel replication Sharding MaxScale proxy (future) Enhanced optimization Improved and special purpose storage engines Carefully tuned and enhanced server internals Advanced performance monitoring HA clustering - integrating Galera cluster More online operations, less planned downtime Interoperable storage engines such as Cassandra and Connect Dynamic columns and JSON processing HandlerSocket API Comprehensive diagnostics built-in to the DB APIs and open architecture for easier integration Role-based access control Authentication plugins Sophisticated auditing capabilities
Environnement Distributionlinux RedhatetRedhatPro7.0 OpenSUSE ArchLinux Mageia Fedora CentOS Mint Ubuntu Debian
Installationenvironnementembarqué AMP=ApacheMySQLPHP $apt getinstallapache2libapache2 mod php5mysql server libapache2 mod auth mysqlphp5 mysqlphpmyadmin $sudo/etc/init.d/apache2restart..etc...
GOMariaDB
MySQL MariaDB Vérification $mysql uroot p showdatabases; Repositories https://downloads.mariadb.org/mariadb/repositories
MySQL MariaDB(1/2) https://downloads.mariadb.org/mariadb/repositories sudoapt getinstallsoftware properties common sudoapt keyadv recv keys keyserverhkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db sudoadd apt repository'deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.0/ubuntuvividmain'
MySQL MariaDB(2/2) $sudoapt getupdate $sudoapt getinstallmariadb server $mysql uroot p <enterpassword> showdatabases;
Compatibilité 5.x 5.x
Repèredesversions MariaDB5.1 MySQL5.1 MariaDB5.2 MariaDB5.1 MariaDB5.3 MariaDB5.2 MariaDB5.5 MariaDB5.3+MySQL5.5 MariaDB10.0 MariaDB5.5+MySQL5.6 MariaDB5.6 MariaDB5.5+MySQL5.6 2015 MariaDB10.1 MariaDB10.0+MySQL5.6/5.7
Apprentissage
PerformanceMariaDB10.1etMySQL5.7.4 https://blog.mariadb.org/performance evaluation of mariadb 10 1 and mysql 5 7 4 labs tplc/
DifférentsconnecteursavecMariaDB PHP(drivernatif) BSDlicence Python Perl Ruby.NETavecMyODBC JDBC(basésurdrizzledriver) C Oracleconnector(licenceGPL) ToussontLGPL Aucunelicencecommerciale
Exemple1:wampserver(1/2) DLMariaDB(http://mariadb.org) Installerdans1dossierMySQL DéplacerlesBDDsauvegardées\data\ LancerWampserver
Exemple1:Wampserver(2/2)avecphpMyAdmin
Exemple2:Neard TéléchargerNeard http://sourceforge.net/projects/neard Installation L MySQ DB Maria
Exemple3:Linux sudo apt-get install mariadb-server mariadb-client Vous retrouvez: /etc/mysql/my.cnf > mysql Au final
Aufinalparlecode <?php echophpinfo();?>
Outils Pourvosrequêtes Backup MySQLWorkbench MySQLdump XtraBackup mysqlhotcopy(myisam) HeidiSQL XtraBackupmanager(PHP) PhpMyAdmin... SkySQLvisualEditor (SQLYog) ToadForMySQL...
Colonnesdynamiques Dispo MariaDB 5.3+ Pont entre les BDD relationnelles et non relationnelles Toutes les colonnes stockées dans un 'blob' Possibilité de manipuler Possibilité de créer des index virtuels Source:https://mariadb.com/kb/en/mariadb/dynamic columns/
Multiproduits Exemple(colonnedynamique)1/3 createtablenewsql( COLUMN_CREATE( idint column_nr, auto_increment value[astype], primarykey, [ nomvarchar(40), column_nr, typeenum value[astype] ('animal', ], 'ordinateur'),...) prixint, nosqlblob); ID nom type Prix blob
Exemple(colonnedynamique)2/3 ID Nom type 1 Atari Ordinateur 2 elephpant animal prix couleur 500 Noir type Multiproduits taille description normal peluche Ste 20 bleu >INSERTintonewsqlvalues(NULL,'Atari','ordinateur',500, COLUMN_CREATE('couleur','Noir','type','STe')); >INSERTintonewsqlvalues(NULL,'elePHPant','animal',20, COLUMN_CREATE('taille','normal','description','peluche')); >UPDATEnewsqlSETnosql=COLUMN_ADD(nosql,'couleur','blue') WHEREid=2; >SELECTnom,column_list(nosql)FROMnewsql;
Exemple(colonnedynamique)3/3 Multiproduits >SELECTnom,COLUMN_JSON(nosql)FROMnewsql; >SELECTid,type,nom, COLUMN_GET(nosql,'couleur'aschar)AScouleur,prixFROMnewsql;
Lesdifférentespossibilitésdecommuniquer
Moteurdestockage storageengine
Insertiondedonnées:TokuDB Moteurdestockage NatifdansMariaDB5.5&MariaDB10.0+ (R)Tokutek&MariaDB Techniqueutilisel'arbrefractal Améliorationindexation Améliorationdesrequêtes Schémadevitesse Compression Réplication Souple
TokuDB:exemple
Manipulerlesdonnées:Connect DispoMariaDB10.0+ ETL:Extract,transformetLoad Lecture/Ecriture/MAJ TXT,DBF,INI,XML MSAccess,MSExcel,TBL(similaireàMERGE) ODBC,MySQL,SQLite,Oracle,DB2,WMI... Localeoudistant Custompossible Accèsenparallèlesurmultitables InstallationdansMy.cnf [mysqld] plugin load=ha_connect.so
Connect:exempleCSV Fichier first,last,birthday "Christophe","Villeneuve","Jan1" "PHP","ODBC","Nov22" >CREATETABLEusers_csv( firstvarchar(32)notnull, lastvarchar(32)notnull, birthdayvarchar(50)notnull )ENGINE=CONNECTTABLE_TYPE=CSVFILE_NAME='/var/lib/mysql/users.csv' HEADER=1SEP_CHAR=','QUOTED=1; >SELECT*FROMusers_csv; first last birthday + + + + Christophe Villeneuve Jan1 PHP ODBC Nov22 + + + +
Connect:exempleODBC >createtabletable2 ENGINE=CONNECTTABLE_TYPE=ODBC SRCDEF='selectkey,sum(l_quantity)qtfromdbt3.table1groupbykey' CONNECTION='DSN=oracle;UID=login;PWD=password'; >MariaDB[dbt3]>selectsum(qt)from(selectqtfromtable2)as result; 31444 Valeurdesum(qt)
RechercheSphinxSE DispoMariaDB5.2+ RechercheFull text Nestockepaslesdonnées ClienthautpourpermettreàMariaDBdeparleràSphinx searchd InstallationdansMy.cnf [mysqld] plugin load='ha_sphinx.so';
ExempleSphinxSE CREATETABLEt1( idintegerunsignednotnull, Entier Poids weightintegernotnull, queryvarchar(3072)notnull, Votrerequete group_idinteger, Group Indexation Requete INDEX(query) )ENGINE=SPHINX CONNECTION="sphinx://localhost:9312/test"; SELECT*FROMt1WHEREquery='testit;mode=any';
OuvertureversleNewSQL Moteurdestockage:CassandraSE DispoMariaDB10.0+ BriquedeApacheCassandra Donnéesnonrelationnelles(NoSQL) Assurerl'intégrationdesdonnéesSQL/NoSQL Mappingpossible Manipulations: staticcolumns,dynamiccolumns,rowkey InstallationdansMy.cnf [mysqld] plugin load=ha_cassandra.so
CassandraSE:Utilisation(1/2) Clé primaire obligatoire >createtablet2(rowkeyvarchar(36)primarykey, data1varchar(60), data2varchar(60) )engine=cassandra keyspace='mariadbtest' thrift_host='localhost' column_family='cf1'; Colonnes statiques Sousensemble descolonnescf
CassandraSE:Utilisation(2/2) >insertintot1values ('rowkey10','data1 value',123456), ('rowkey11','data1 value2',34543); >select*fromt1whererowkey='rowkey11';
XAenSpider DispoMariaDB10.0+ Moteurdestockagefédéréscomme Sharding/partitionnement* Transactions* Intégrédanslepooldeconnexion HautedisponibilitéClusterShared Nothing Loadbalancing: AccèsparSpiderclusteravecplusieursserveurs MariaDB
Spider:Exemple
Automatisation&Réplication
MariaDBGaleraCluster Lesréplicationssynchrones Desréplicationsmultimaitresactifs Noeuds Lecture/Écrituresimultané Détectionautomatiquesiun nœudtombe Réintégrationd'unnœud automatiquement Pasdelagauniveaudesslaves Aucunestransactionsperdues Latencesclientesplusfaible MariaD B MariaD B MariaD B Galera Replication
MariaDBGaleraClusteretStandardReplication(1/2) Srv 1 Srv 2 Srv 2 MariaDB Multi Source Asynchronous replication Mg c1 Galera Cluster Mg c3 Mg c2 Synchronous replication
MariaDBGaleraClusteretStandardReplication(2/2) Esclave peut facilement lier à nouveau maître avec GTID Asynchronous replication Mg c1 Galera Cluster Mg c3 Mg c2 Synchronous replication Slave
MariaDBMaxScaleProxy(loadbalancing) MaxScale Repartirlachargede connexion(=proxy) Lecture/Ecriture MaxScale Surveillel'étatdesbackends Ajusteretsurveillerbackends Améliorerlascalabilitéetla disponibilité Autresusages:filtrage,d'audit, deréécrituredesrequêtes...
MariaDBMaxScaleBinLogServer Unserveurbinlogportebinlog/pasdebasesdedonnées Petitlag/Petitvidangesurlemaître Facilereconfigurationdelatopologie
Merci