mysql:
大規模,高併發web服務器體系結構
mysql複製,nginx,lnmp,memcached,tomcat(java,servlet,集羣),varnish
nosql(redis,mongodb)
二進制日誌
事物日誌
錯誤日誌
一般查詢日誌
中繼日誌
慢查詢日誌
二進制日誌:
數據目錄
mysql-bin.xxxxxx
滾動:達到最大上限,flush logs,服務器重啓
mysql>purge
二進制日誌的格式:
statement
row
mixed
mysql-bin.index:二進制日誌文件索引文件
mysql>show master status;
mysql>show binary logs;
mysql>show binlog events in "flie";
event:
timestamp
position,offset,server-id
即時點還原:
mysql:tx1
mysql隔離級別:
READ-UNCMMITTED
READ-COMMITTED
REPEATABLE-READ
SERIALIZABLE
mysql replication
relay log:中繼日誌
多級複製
複製的作用:
輔助實現備份
高可用
異地容災
scale out:分攤負載
rw-spliting:讀寫分離
主從架構中,不使用mysql代理,如何讓主的負責寫,從的負責讀?
雙主:無法減輕寫操作
雙主模型:
tutors:name,age,gender,tid
Tom 10
Jerry 30
A:update tutors set name=Jerry where age=10;
B:update tutors set age=30 where name=Tom;
scale out
分庫,垂直拆分,水平分割
scale on
讀寫分離:
mysql-proxy
amoeba
數據拆分:
cobar
master:slave
slave:master
一個從只能屬於一個主服務器
MySQL 5.5:gtid,multi-thread replication
配置MySQL複製基本步驟:
一、master
1.啓用二進制日誌
log-bin = master-bin
log-bin-index = master-bin.index
2.選擇一個惟一server-id
server-id = {0-2^32}
3.創建具有複製權限的用戶
REPLICATION SLAVE
REPLICATION CLIENT
二、slave
1.啓用中繼日誌
relay-log = relay-log
relay-log-index =
2.選擇一個惟一的server-id
server-id = {0-2^32}
3.連接至主服務器,並開始複製數據
mysql>CHANGER MASTER TO MASTER_HOST='',MASTER_PORT='',MASTER_LOG_PORT='',MASTER_LOG_FILE='',MASTER_LOG_FIEL_POS='',MASTER_USER='',MASTER_PASSWORD='';
mysql> start slave;
mysql>start slave IO_Thread;
mysql>start SLAVE SQL_Thread
複製線程:
master:dump
slave:IO_thread,SQL_thread
node1(master):
mkdir -pv /mydata/data
useradd -r mysql
chown -R mysql.mysql /mydata/data/
tar -zxvf mysql-5.5.28 -C /usr/local
ln -sv mysql-5.5.28-linux2.6-i686 mysql
cd /usr/local/mysql
chown -R root.mysql ./
script/mysql_install_db --user=mysql --datadir=/mydata/data
cp support-files/my-large.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
vim /etc/my.cnf
[mysqld]
log-bin = master-bin
log-bin-index=master-bin.index
innodb_file_per_table = 1
datadir = /mydata/data
server-id = 1
service mysqld start
vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile.d/mysql.sh
mysql>grant replication slave on . to 'repluser'@'172.16.%.%' identified by 'replpass';
mysql>flush privileges;
mysql>show master status;
mysql>show binlog event in 'master-bin.000001';
scp /etc/my.cnf node2:/etc/my.cnf
node2(slave):
mkdir /mydata/data
useradd -r mysql
chown -R mysql.mysql /mydata/data
tar -zxvf mysql-5.8.28 -C /usr/local
ln -sv mysql-5.5.28-linux2.6 mysql
cd /usr/local/mysql
chown -R root:mysql ./
script/mysql_install_db --user=mysql --datadir=/mydata/data
cp support-files/mysql.server /etc/init.d/mysqld
vim /etc/my.cnf
log-bin=master-bin(註釋掉)
log-bin-index=master-bin.index(註釋掉)
relay-log=relay-log
relay-log-index=relay-log.index
server-id = 11
service mysqld start
vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile.d/mysql.sh
mysql>change master to master_host='172.16.100.6',master_user='repluser',master_log_file='master-bin.00001',master_log_pos=339;
mysql>show slave status;
mysql>start slave;
mysql>show global variables like 'read%';
vim /etc/my.cnf
read-only=on
service mysqld restart
mysql> show global variables like 'read-only';
cd /mydata/data
cat master.info
cat relay-log.info
read-only=yes:在從服務器上設定,但對具有super權限的用戶不生效
mysql>show global variables like '%log%';
sync-binlog=on:在主服務器上設定,用於事務安全;
mysql>show global variables like '%slave';
mysql>stop slave;
mysql>show slave status\G;
mysql>start slave io_thread;
mysql>start slave sql_thread;
半同步複製:
cd /usr/local/mysql/plugin
node1(master)
mysql>install plugin rpl_semi_sync_master soname 'semisync_mater.so';
mysql>show global variables like '%rpl%';
mysql>set global rpl_semi_sync_master_enabled=1;
mysql>show master status;
node2(slave)
mysql>install plugun rpl_semi_sync_slave soname 'semisync_slave.so';
mysql>set global rpl_semi_sync_slave_enable=l;
mysql>stop slave IO_THREAD;
mysql>start slave IO_THREAD;
mysql>show slave status;
另一個管理工具:
percona:percona-tools
mattki-tools
yum localinstall percona-toolkit
pt-slave-delay
主主複製:
見另外文檔
mysql>show global variables like '%ssl%';
只複製指定的庫或表(複製過濾):
MySQL:
mysql>show global variables like 'binlog-%';
master:
binlog-do-db:僅將指定數據庫的相關修改操作記入二進制日誌
binlog-ignore-db:
mysql>create database db1;
mysql>create databse discuz;
slave:
replicate-do-db=
repicate-ignore-db=
replicate-do-table=
replicate-ignore-table=
relicate-wild-do-table=
replicate-wild-ignore-table=
vim /etc/my.cnf
replicate-do-db=discuz(這是一個你要複製的數據庫名稱)
每個數據庫僅能使用一個線程
複製涉及到多個數據庫時多線程複製纔有意義
MySQL-5.6:GTID
slave-parallel-workers=0
0:表示禁用多線程工具
mysql>show slave hosts;
配置基於gtid及多線程複製:(見配置文檔)
master:
[mysqld]
binlog-format=row
log-bin=master-bin
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
matser-info-repository=table
relay-log-info-repository=table
sync-master-info=1
slave-parallel-works=2
binlog-checksum=crc32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server-id=1
report-port=3306
port=3306
datadir=/mydata/data
socket=/tmp/mysql.sock
report-host=172.16.100.107
slave:
[mysqld]
binlog-format=ROW
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server-id=11
report-port=3306
port=3306
log-bin=mysql-bin.log
datadir=/mydata/data
socket=/tmp/mysql.sock
report-host=172.16.100.7
master:
mkdir /mydata/data
useradd -r mysql
chown -R mysql.mysql /mydata/data
tar -zxvf mysql-5.6.10 -C /usr/local
cd /mysql
scripts/mysql_install_db --user=mysql --datadir=/mydata/data
vim /etc/my.cnf(見配置文檔)
datadir=/mydata/data
innodb_file_per_table=on
server-id=1
socket=/tmp/mysql.sock
log-bin=master-bin
.........
vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/sbin
mysql>show global variables like '%gtid%';
mysql>show master status;
mysql>show global variables like '%uuid%';
mysql>grant replication slave on . to 'repluser'@'172.16.%.%' identified by 'repluser'
mysql>flush privileges;
mysql>create database mydb;
mysql>show slave hosts;
mysql>show global variables like '%gtid%';
mysql>select @@autocommit;
mysql>use mydb;
mysql>create table mytable(id int(10),name char(10));
slave:
mkdir /mydata/data
useradd -r mysql
chown -R mysql.mysql /mydata/data
tar -zxvf mysql-5.6.10 -C /usr/local
cd /mysql
scripts/mysql_install_db --user=mysql --datadir=/mydata/data
vim /etc/my.cnf(見配置文檔)
[mysqld]
datadir=/mydata/data
server-id=11
socket=/tmp/mysql.sock
log-bin=master-bin
.........
vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/sbin
cp support-files/mysql.server /etc/init.d/mysqld
service mysqld start
mysql>show global variables like '%uuid%';
mysql>change master to master_host='172.16.100.106',master_user='repluser',master_password='replpass',master_auto_position=1;
mysql>show slave status;
mysql>start slave;
mysql>show databases;