新版mysql搭建多線程主從復制
一:首先得到
mysql-5.7.11-1.el6.x86_64.rpm-bundle.tar
tar xf mysql-5.7.11-1.el6.x86_64.rpm-bundle.tar
yum install -y mysql-community-client-5.7.11-1.el6.x86_64.rpm mysql-community-common-5.7.11-1.el6.x86_64.rpm mysql-community-libs-5.7.11- 1.el6.x86_64.rpm mysql-community-libs-compat-5.7.11-1.el6.x86_64.rpm mysql-community-server-5.7.11-1.el6.x86_64.rpm
啟動:
/etc/init.d/mysqld start
[root@vm10 mnt]# /etc/init.d/mysqld start
Initializing MySQL database: [ OK ]
Installing validate password plugin: [ OK ]
Starting mysqld: [ OK ]
獲得初始密碼:
grep 'temporary password' /var/log/mysqld.log
mysql -p 回車之後輸入初始密碼
改密碼:
ALTER USER root@localhost identified by 'Redhat007!'
密碼規則:必須大於八位 ,有大寫,小寫,數字,特殊字符
然後在裡面創建數據庫 xp1 後面測試要用
mysql> create database xp1;
然後我在 /mnt底下創建了add.sql (方便後面使用)代碼如下:
- CREATE TABLE usertb (
- id serial,
- uname varchar(20),
- ucreatetime datetime ,
- age int(11)
- )
- ENGINE=MYISAM
- DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
- AUTO_INCREMENT=1
- ROW_FORMAT=COMPACT;
- delimiter $$
- SET AUTOCOMMIT = 0$$
- create procedure test1()
- begin
- declare v_cnt decimal (10) default 0 ;
- dd:loop
- insert into usertb values
- (null,'用戶1','2010-01-01 00:00:00',20),
- (null,'用戶2','2010-01-01 00:00:00',20),
- (null,'用戶3','2010-01-01 00:00:00',20),
- (null,'用戶4','2010-01-01 00:00:00',20),
- (null,'用戶5','2011-01-01 00:00:00',20),
- (null,'用戶6','2011-01-01 00:00:00',20),
- (null,'用戶7','2011-01-01 00:00:00',20),
- (null,'用戶8','2012-01-01 00:00:00',20),
- (null,'用戶9','2012-01-01 00:00:00',20),
- (null,'用戶0','2012-01-01 00:00:00',20)
- ;
- commit;
- set v_cnt = v_cnt+10 ;
- if v_cnt = 10000000 then leave dd;
- end if;
- end loop dd ;
- end;$$
- delimiter ;
然後在新創建的那個數據庫中執行那段代碼
觸發代碼中的存儲過程
call test1 會在usertb 表中插入一千萬行數據
如下證明數據已經插入
修改代碼,在向其中創建表usertb1 ,然後繼續觸發,往裡面寫入一千萬行數據
(創建兩個表主要想讓mysqldump和mysqlpump的差別更明顯)
如下證明創建成功
測試mysqldump 和mysqlpump
mysqldump:
mysqlpump:
time mysqlpump -p xp1 > xp1.sql
如上,明顯快了十秒,這還使用的是mysqlpump的默認線程數 2
time mysqlpump -pRedhat006! --default-parallelism=4 db1 > db1.sql
--default-parallelism=4 使用線程數 可以自己修改
做個mysql的A -- B復制
配置環境: master: 172.25.254.10
slave: 172.25.254.11
首先在master主機裡
vim /etc/my.cnf
server-id=1
log-bin=mysql-bin
binlog-do-db=test
/etc/init.d/mysqld restart
mysql -pRedhat007!
用如下命令查看一下,看是否成功
新建test庫: create database test;
授權:
mysql> grant replication slave on *.* to xpp@'172.25.254.11' identified by 'Redhat007!';
Query OK, 0 rows affected, 1 warning (0.40 sec)
/etc/init.d/mysqld restart
slave端: 172.25.254.11
vim /etc/my.cnf
server-id=2 與master不同即可
然後再slave上面安裝最新版的mysql
首先驗證master是否授權成功
mysql -pRedhat007! -uxpp -h172.25.254.10 如果可以登錄進去的話就證明成功
mysql -pRedhat007!
新建test庫,因為在做同步之前兩個數據庫中的內容必須一致
然後:chang master to master_host='172.25.254.10', master_user='xpp' , master_password='Redhat007!', master_log_file='mysql-bin.000001', master_log_pos=154;
/etc/init.d/mysqld restart
在master端:
MySQL 的新特性之一,是加入了全局事務 ID (GTID) 來強化數據庫的主備一致性,故障恢復,以及容錯能力
vim /etc/my.cnf 加如下兩行,開啟gtid模式
gtid-mode=on
enforce-gtid-consistency=on
/etc/init.d/mysqld restart
然後再slave上
vim /etc/my.cnf 加如下
gtid-mode=on
enforce-gtid-consistency=on
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
/etc/init.d/mysqld restart