////////////////////MySQL主從(同一台主機)//////////////////////
1.安裝配置MySQL
參考之前步驟搭建MySQL服務
為了做實驗方便,我們在同一台機器上配置兩個MySQL服務(跑兩個端口)
cd /usr/local/
cp -rv mysql mysql_2
cd mysql_2
初始化mysql_2 : ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql2
拷貝配置文件:cp /etc/my.cnf ./my.cnf
修改配置文件相關參數: vim my.cnf #更改port以及socket
啟動:/usr/local/mysql_2/bin/mysqld_safe --defaults-file=/usr/local/mysql_2/my.cnf --user=mysql &
若開機啟動,需要加入到/etc/rc.local中
2.配置主從准備工作
設定mysql_2,為主端口3307,mysql為從端口3306
在主上創建測試庫 : create database db1;
然后導出主的mysql庫數據然后導入給db1
mysqldump -uroot -S /tmp/mysql2.sock mysql > 123.sql;
mysql -uroot -S /tmp/mysql2.sock db1 < 123.sql
3.配置主(master)
vim /usr/local/mysql_2/my.cnf #修改或者添加:
server-id=1
log-bin=mysql-bin
兩個可選參數(2選1)
binlog-do-db=db1,db2 #需要同步的庫
binlog-ignore-db=db1,db2 #忽略不同步的庫
修改配置文件后,重啟mysql_2
pid=`ps aux|grep mysql2.sock|grep -v grep|awk '{print $2}'`;kill $pid; cd /usr/local/mysql_2/bin/; ./mysqld_safe --defaults-file=../my.cnf --user=mysqld &
設置root密碼:mysqladmin -uroot -S /tmp/mysql2.sock password '123456'
grant replication slave on *.* to 'repl'@'127.0.0.1' identified by '123123';
flush tables with read lock;
show master statusl#一定要記住前兩列的內容,待會會用到
4.設置從(slave)
vim /etc/my.cnf #修改或增加
server-id=2 #這個數值不能和主一樣
可選參數:replicate-do-db=db1,db2
replicate-ignore-db=db1,db2 #意義同主的兩個可選參數
service mysqld restart
拷貝主的db1庫數據到從: mysqldump -uroot -S /tmp/mysql2.sock -p123456 db1 > db1.sql;
mysql -uroot -p -e"create database db1";mysql -uroot -p db1 < db1.sql
mysql -uroot -p #登陸從的MySQL
slave stop;
change master to master_host='127.0.0.1',master_port=3307,master_user='repl',master_password='123123',master_log_file='mysql-bin.000006',master_log_pos=474952;
slave start;
主上:mysql -uroot -S /tmp/mysql2.sock -p123456 -e "unlock tables"
從上查看從的狀態:show slave status\G;
5.測試主從
主上清空db1庫的db表:use db1 ; select count(*) from db;truncate table db;
進入salve,查看db1庫db表:use db1;select count(*)from db;
主上刪除表db: drop table db;
從上看db表不存在了
建議:MySQL主從機制比較脆弱,需要謹慎操作。如果重啟master,務必要先把slave停掉,也就是說需要在salve上去執行,salve stop 命令,然后再去重啟master的MySQL服務,否則很可能就會中斷了。當重啟完后,還需要把salve給開啟 salve start