說明:有很多同窗不能一次性把實驗作成功,這是由於還不熟悉,建議至少作3遍html
注意:作實驗先關閉防火牆mysql
• MySQL主從是基於binlog的,主上須開啓binlog才能進行主從。linux
• 主從過程大體有3個步驟sql
• 1)主將更改操做記錄到binlog裏數據庫
• 2)從將主的binlog事件(sql語句)同步到從本機上並記錄在relaylog裏vim
• 3)從根據relaylog裏面的sql語句按順序執行bash
• 主上有一個log dump線程,用來和從的I/O線程傳遞binlog服務器
• 從上有兩個線程,其中I/O線程用來同步主的binlog並生成relaylog,另一個SQL線程用來把relaylog裏面的sql語句落地架構
主從同步 :less
主服務器 :受權容許同步:
(1)NS記錄;
(2)受權容許區域傳送
從服務器 :
(1)只需定義區域
17.2 準備工做
準備兩臺機器,都安裝mysql服務,機器01: IP:192.168。133.130做爲主庫,機器02:IP:132做爲從庫。
一、先切換到cd /usr/local/src/,wget下載MySQL,在兩臺機器上面,而後解壓。
二、把解壓完的目錄放到/usr/localmysql, 命令:mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql,,,,先檢查有沒有這個/usr/local/mysql目錄。若是有,就更名字。。。移動完成後,
使用命令查看:ls /usr/local/mysql ,發現目錄下面有:bin、data、include、man、lib。
三、先建立用戶,useradd=mysql, 初始化:./scripts/mysql_install_db --user=mysql --datadir=/data/mysql ,查看有沒有初始化完成,命令:echo $?
四、vi /etc/my.cnf, 把datadir後面修改爲datadir=/data/mysql
五、cp support-files/mysql.server /etc/init.d/mysqld #把啓動腳本複製到/etc/init.d/mysqld
六、vim /etc/init.d/mysqld 中定義basedir和datadir, , , ,命令:basedir=/usr/local/mysql和datadir=/data/mysql
七、啓動mysql服務,/etc/init.d/mysqld start
只有命令:less !$,翻頁查看
修改方法:
在機器01上面操做
[root@ocalhost mysql]# chown -R mysql:mysql # 所屬組和所數者爲mysql
[root@localhost ] # /etc/init.d/mysqld start 啓動mysql服務
Staring MySQL.SUCCESS #啓動成功
[root@localhosts ~]# !ps #查看啓動的mysql服務
在機器02查看啓動mysql
[root@ocalhost 02]# ls /usr/local/mysql # 所屬組和所數者爲mysql
bin data include man my-new.cnf README share support-files
[root@localhosts 02~]# /etc/init.d/mysqld start #啓動mysql服務
[root@localhosts ~]# ps aux | grep mysql #有mysql字樣和端口信息,MySQL說明啓動了
• 安裝mysql
• 修改my.cnf,增長server-id=130和log_bin=aminglinux1 #01終端的名字
• 修改完配置文件後,啓動或者重啓mysqld服務
• 把mysql庫備份並恢復成aming庫,做爲測試數據
• mysqldump -uroot mysql > /tmp/mysql.sql
• mysql -uroot -e 「create database aming」
• mysql -uroot aming < /tmp/mysql.sql
• 建立用做同步數據的用戶
• grant replication slave on *.* to 'repl'@slave_ip identified by 'password';
• flush tables with read lock;
• show master status;
在機器01上面操做
第一步
修改配置文件
[root@ocalhost mysql]# vi /etc/my.cnf # aminglinux1 01終端的名字
[root@localhost mysql]# /etcinit.d/mysqld restart #重啓MySQL服務
[root@ocalhost mysql]# pwd #查看當前的目錄
/data/mysql
[root@ocalhost mysql]# ls -lt #查看有沒有生成aminglinux文件
...... 1 mysql mysql 238972323 .. ... ... .. aminglinux1.0001
...... 1 mysql mysql 238972323 .. ... ... .. aming #數據庫的名字
...... 1 mysql mysql 238972323 .. ... ... .. aminglinux.index #實現主從的文件
...... 1 mysql mysql 238972323 .. ... ... .. blog #接下來須要的blog文件
第二步
[root@ocalhost mysql]# mysqldump -uroot -p aminglinux blog > /tmp/blog.sql #備份blog文件
[root@localhost mysql]# du sh /tmp/blog.sql # 查看備份文件的大小
[root@ocalhost mysql]# mysql -uroot -p aminglinux -e "create database aming" #-e 建立一個新的庫
[root@localhost mysql]# mysql -uroot -p aminglinux aming < /tmp/blog.sql #恢復blog文件到原來的地方
建立用做同步數據的用戶
[root@ocalhost mysql]# mysql -uroot -p aminglinux #進入aming數據庫裏面
mysql> grant replication slave on *.* to 'repl'@192.168.133.132 identified by '123456'; #指定權限 replication slave 全部的庫、全部的表,用戶repl,針對來源的IP,也就是02機器上的IP
鎖定表
mysql > flush tables with read lock;
mysql > show master status;
mysql > quit #退出來
[root@localhost mysql]# ls #查看全部的數據庫
mysql mysql2 zrlog
[root@ocalhost mysql]# mysql -uroot -p aminglinux mysql2 < /tmp/my2.sql #把mysql2 移到my2.sql
[root@localhost mysql]# mysql -uroot -p aminglinux zrlog < /tmp/zrlog.sql #把zrlog移到/tmp/zrlog.sql
[root@localhost mysql]# ls /tmp/*sql #查看拷貝的文件
/tmp/zrlog.sql /tmp/my2.sql /tmp/blog.sql
• 安裝mysql
• 查看my.cnf,配置server-id=132,要求和主不同
• 修改完配置文件後,啓動或者重啓mysqld服務
• 把主上aming庫同步到從上
• 能夠先建立aming庫,而後把主上的/tmp/mysql.sql拷貝到從上,而後導入aming庫
• mysql -uroot
• stop slave;
• change master to master_host='', master_user='repl', master_password='', master_log_file='', master_log_pos=xx,
• start slave;
• 還要到主上執行 unlock tables
實例:
在02機器上面操做
[root@localhost ~]# ps aux | grep mysql #查看mysql服務有沒有啓動
[root@ocalhost ~]# vi /etc/my.cnf
[root@localhost ~]# /etcinit.d/mysqld restart #重啓MySQL服務
[root@localhost ~]# ls /data/mysql #查看/data/mysql下的文件
[root@localhost ~]# scp 192.168.133.130:/tmp/*.sql /tmp/ #從01機器拷貝一些數據庫
[root@ocalhost mysql]# mysql -uroot
-bash:mysql:未找到命令
[root@localhost mysql]# alias 'mysql=/usr/local/mysql/bin/mysql'
[root@ocalhost mysql]# alias 'mysqldump=/usr/local/mysql/bin/mysqldump'
[root@localhost mysql]# mysql -u root
mysql > create database aming;
mysql > create database zrlog; #建立兩個庫
mysql > create database blog
mysql > create database mysql2;
mysql > quit #退出來
[root@localhost mysql]# mysql -uroot blog < /tmp/blog.sql # 恢復
[root@ocalhost mysql]# mysql -uroot zrlog < /tmp/zrlog.sql
[root@localhost mysql]# mysql -uroot aming < /tmp/blog.sql
[root@ocalhost mysql]# mysql -uroot aming < /tmp/blog.sql
[root@localhost mysql]# mysql -uroot mysql2 < /tmp/my2.sql
[root@ocalhost mysql]# ls /data/mysql
在機器01上面操做
[root@localhost mysql]# ls /data/mysql #查看01和02上面的文件是否同樣
實現主從
在02上面操做
[root@ocalhost mysql]# mysql -u root
mysql > start slave;
mysql > stop slave;
mysql > change master to master_host='192.168.133.130', master_user='repl', master_password='123456', master_log_file='amingliunx1.000001', master_log_pos=474566;
mysql > start slave; #保存修改
• 從上執行mysql -uroot
• show slave stauts\G
• 看是否有
• Slave_IO_Running: Yes
• Slave_SQL_Running: Yes
• 還需關注
• Seconds_Behind_Master: 0 //爲主從延遲的時間
• Last_IO_Errno: 0
• Last_IO_Error:
• Last_SQL_Errno: 0
• Last_SQL_Error:
實例:
在02機器上面操做
mysql > show slave status\G #查看主從配置有沒有配置成功
若是有兩個yes,說明配置主從成功了;若是兩個有一個不YES,說明主從已經斷開了
在01機器上面操做
[root@localhost mysql]# mysql -uroot -p aminglinux
mysql > unlock tables; #作完主從以後,恢復
mysql > exit
幾個配置參數
• 主服務器上
• binlog-do-db= //僅同步指定的庫
• binlog-ignore-db= //忽略指定庫
• 從服務器上
• replicate_do_db=
• replicate_ignore_db=
• replicate_do_table= #
• replicate_ignore_table= #
• replicate_wild_do_table= //如aming.%, 支持通配符%
• replicate_wild_ignore_table=
• 主上 mysql -uroot aming
• select count(*) from db;
• truncate table db;
• 到從上 mysql -uroot aming
• select count(*) from db;
• 主上繼續drop table db;
• 從上查看db表
實例:
主上 01上面
mysql > use aming; #登錄aming庫
mysql > show tables; #查看阿明數據庫
mysql > select count(*) wp_users; #查看行數
mysql >
mysql >
在 02上面操做
mysql > use aming;
mysql > select count(*) from wp_users;
主上 01上面
mysql > truncate table wp_users #清空
mysql > select count(*) from wp_users; #查看數據庫裏面的東西有沒有被清空,
mysql > select * from wp_users; #若是上一步沒有清空,執行這一步
在 02上面操做,清空數據庫
mysql > select count(*) from wp_users; #查看數據庫裏面的東西有沒有被清空,
mysql > select * from wp_users; #再檢測一次,是否被清空
測試再主上面刪除一個表,再從上面查看,是否查找到
mysql > drop table wp_users; #刪除wp_users表
mysql >
在02機器,從的上面查看
mysql > select * from wp_users;
mysql > drop databas aming; #刪除aming庫
mysql > show slave status\G #測試主從配置有沒有出錯誤。
而後再01上面散出阿明表,在02上面測試
mysql > mysql > drop databas aming; #刪除aming庫
在02機器,從的上面查看
mysql > show slave status\G #測試主從配置有沒有出錯誤。
常見問題:
主從庫正常運行的時候,可否刪除多餘的bin-log日誌,刪除後會不會對主從庫有意響,如何正確的刪除bin-log
答:正確作法是在my.cnf配置日誌過時時間。 自動刪除。
固然也能夠在mysql裏面去刪除http://www.jb51.net/article/117819.htm
二、把從庫的數據所有恢復了,再去解鎖主庫的表;
若是是生產環境,我主庫備份的數據庫有10G多,我從庫還原完,再去解鎖主庫的表;
答:首先,作主從這種操做基本上是在架構搭建初期就作好了的,
擴展裏面,我們不是有提到過,不停庫作主從的文章。 還有就是,儘可能選擇在凌晨,沒有啥用戶的時候作,金融類的,確定要發通知的。
三、
我在配置好了以後出現了錯誤:
Slave_IO_Running: connecting Slave_SQL_Running: Yes
仔細檢查後發現主mysql配置受權的時候密碼有問題。
從新受權後再次查看狀態就ok了!切記必定要注意配置的各項參數!
答:後來檢查到是沒有關閉firewalld,selinux.
有的同窗,遇到主從不能正常同步,提示uuid相同的錯誤。這是由於克隆機器致使。 https://www.2cto.com/database/201412/364479.html