配置主從準備工做mysql
安裝兩臺mysql,並啓動sql
在主上建立測試庫數據庫
# mysql -uroot -S /tmp/mysql.sock -e "create database db1;"vim
而後導出主的 mysql 庫數據而後導入給 db1centos
# mysqldump -uroot -S /tmp/mysql.sock mysql > 123.sqlide
# mysql -uroot -S /tmp/mysql.sock db1 < 123.sql測試
配置主(master)centos7
[root@wjh5 ~]# vim /etc/my.cnfspa
#打開主的配置文件#rest
修改或添加:
server-id=1
#這個數值不能和從同樣#
log-bin=wjh
#把這行註釋打開,名字能夠自定義#
兩個可選參數(2 選 1):
binlog-do-db=db1,db2 #用來指定須要同步的庫
binlog-ignore-db=db1,db2 #指定忽略不一樣步的庫
修改配置文件後,重啓 mysql
[root@wjh5 ~]# service mysqld restart
[root@wjh5 ~]# ls /data/mysql
db1 ib_logfile1 mysql-bin.000002 test wjh5.pid
ibdata1 mysql mysql-bin.000003 wjh.000001 wjh.index
ib_logfile0 mysql-bin.000001 mysql-bin.index wjh5.err
# wjh.000001 wjh.index這個就是產生的bin-log文件.#
受權給從一個用來同步數據的用戶 cong
[root@wjh5 ~]# mysql -S /tmp/mysql.sock
#登錄主#
mysql> grant replication slave on *.* to 'cong'@'127.0.0.1' identified by '123123';
#受權一個用戶是cong,登錄密碼是123123,權限是replication的用戶#
//這裏的repl是爲slave端設置的訪問master端mysql數據的用戶,密碼爲123123,
這裏的127.0.0.1爲slave的ip(由於配置的master和slave都在本機)。
mysql> flush privileges;
#刷新權限,否則不生效,不用重啓數據庫服務#
mysql> flush tables with read lock;
#把表的讀權限鎖死,鎖定數據庫,此時不容許更改任何數據
mysql> show master status;
查看狀態,這些數據是要記錄的,一會要在slave端用到
配置從(slave)
[root@wjh5 ~]# vim /usr/local/mysql_2/my.cnf
#打開從的配置文件#
修改或添加:
server-id=2
#這個數值不能和主同樣#
兩個可選參數(2 選 1):
replicate-do-db=db1,db2 #用來指定須要同步的庫
replicate-ignore-db=db1,db2 #指定忽略不一樣步的庫
#意義同主的那兩個可選參數,若是主已經定義過了,那麼從上就不用再次加這些參數了.#
[root@wjh5 ~]# service mysqld2 restart #重啓從服務#
拷貝主的 db1 庫數據到從(要實現同步必須主和從數據庫一致)
[root@wjh5 mysql_2]# mysql -uroot -S /tmp/mysql2.sock -e "create database db1";
#在從上建立數據庫db1#
[root@wjh5 mysql_2]# ls #以前咱們在主上已經備份過db1數據庫#
123.sql data INSTALL-BINARY my.cnf scripts support-files
[root@wjh5 mysql_2]# mysql -uroot -S /tmp/mysql2.sock db1 < 123.sql
#把123.sql導入到從庫#
[root@wjh5 mysql_2]# mysql -S /tmp/mysql2.sock
#登錄到從mysql#
mysql> slave stop; centos7用stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> change master to master_host='127.0.0.1', master_port=3306, master_user='cong', master_password='123123', master_log_file='wjh.000001', master_log_pos=106;
Query OK, 0 rows affected (0.05 sec)
mysql> slave start;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status\G;
測試mysql主從
[root@wjh5 ~]# mysql #登錄主mysql#
mysql> unlock tables; #解鎖表#
測試主從,在主上刪除一個表
mysql> use db1;
mysql>show tables;
mysql> drop table func; #把表func刪除了#
而後咱們在從上查看:
mysql> use db1;
mysql>show tables;
#從上表func沒了#
建議: MySQL 主從機制比較脆弱,謹慎操做。若是重啓 master,務必要先把 slave 停掉,
也就是說須要在 slave 上去執行 slave stop 命令,而後再去重啓 master 的 mysql 服務,不然
頗有可能就會中斷了。固然重啓完後,還須要把 slave 給開啓 slave start。