mysql主從

一 mysql 主從介紹

mysql 主從又叫replication ,AB復制。簡單講就是A和B兩臺機器做主從後,在A上寫數據,另外一臺B也會跟著寫數據,兩者數據實時同步的。
MySQL主從是基於binlog的,主上須開啟binlog才能實現

技術分享圖片

具體過程為:1)主將更改操作記錄在binlog裏
2)從將主的binlog事件(sql語句)同步到本機上,並記錄在relaylog裏
3)從按順序執行relaylog裏面的sql語句
主上有一個log dump線程,用來和從的I/O線程傳遞binlog,從上有兩個線程,其中I/O線程用來同步主的binlog並生成 relaylog,另外的SQL線程用來把relaylog裏面的sql語句落地

二 mysql 安裝

我們在一臺機子上再裝一個mysql
之前我們的mysql 放在 /usr/lcoal/mysql 下,
1 拷貝basedir重新初始化下

cd /usr/local
cp -r mysql mysql_2
cd mysql_2
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql2

2 重新定義配置文件

vim /usr/local/mysql/my.cnf
basedir=/usr/local/msyql
datadir=/data/mysql2
port=3307
socket=/tmp/mysql2.sock

註意: basedir,datadir ,port,socket 要跟之前裝的mysql嚴格區分開
3 重新定義啟動腳本

cp usr/local/mysql/support-files/mysql.serve /etc/init.d/mysqld2
vim /etc/init.d/mysqld2
basedir=/usr/local/mysql
datadir=/data/mysql2
找到下面的$bindir/mysqld_safe,插入--defaults-file=$basedir/my.cnf
$bindir/mysqld_safe --defaults-file=$basedir/my.cnf --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
      wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?

三 mysql 主庫配置

我們將端口3306的mysql作為主庫,主上操作如下:
1 編輯配置文件,增加server-id 打開binlog功能

vim  /etc/my.cnf
增加下面兩句
server-id=1   (我們設置主為1,從為2)
log_bin=lv

2 準備一個測試庫

修改完配置文件後,重啟mysqld服務
/etc/init.d/mysqld restart
先給root用戶一個密碼
mysqladmin -uroot -S /tmp/mysql.sock password ‘lvlinux‘
mysqldump -uroot -S /tmp/mysql.sock -plvlinux  mysql > /tmp/mysql.sql
mysql -uroot -S /tmp/mysql.sock -plvlinux  -e “create database lv”
mysql -uroot -S /tmp/mysql.sock -plvlinux lv < /tmp/mysql.sql

3 創建用作同步數據的用戶

mysql -uroot -S /tmp/mysql.sock -plvlinux
grant replication slave on *.* to ‘repl‘@127.0.0.1 identified by ‘lvlinux‘;
flush tables with read lock;
show master status;
備註,repl後面跟的ip為從庫的來源ip,因為是同一臺機器,所以寫本機ip

技術分享圖片

四 mysql 從庫配置

我們將端口為3307的mysql作為從庫
從上操作如下
1.編輯配置文件,定義server-id

vim /usr/local/mysql_2/my.cnf
增加一行,server-id=2

2 從上面配置主從關系
修改完配置文件後,重啟mysqld服務。
先給從mysql root 用戶一個密碼
mysqladmin -uroot -S /tmp/mysql2.sock password ‘lvlinux‘
把主上的lv庫搬到從庫

mysql -uroot -S /tmp/mysql2.sock -plvlinux  -e “create database lv”
mysql -uroot -S /tmp/mysql2.sock -plvlinux lv < /tmp/mysql.sql

登錄從庫,進行如下操作

mysql -uroot -S /tmp/mysql2.sock -plvlinux
stop slave;
change master to master_host=‘127.0.0,1‘, master_port=3306,master_user=‘repl‘, master_password=‘lvlinux‘, master_log_file=‘lvlinux.000001‘,    master_log_pos=429;
start slave;
還要到主上執行 unlock tables

備註:master_log_file 和 master_log_pos依次填寫主上show master status 得到的信息
3 查看主從狀態
在從上操作
show slave status\G;
技術分享圖片
兩個線程運行正常,則標示主從配置成功。如果出錯關註
Seconds_Behind_Master: 0 //為主從延遲的時間
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:

五、幾個配置參數

主服務器上
binlog-do-db= //僅同步指定的庫
binlog-ignore-db= //忽略指定庫
從服務器上
replicate_do_db=
replicate_ignore_db=
replicate_do_table=
replicate_ignore_table=
replicate_wild_do_table=
replicate_wild_ignore_table=
最後總結,我們在做主從時,首先要將從庫備份到跟主庫一致。在主從開啟時,要避免再從庫上寫數據。如果要重啟主庫,需要先關閉主從,也就是在從庫上執行stop slave 。重啟完之後,再start slave

Linux學習總結(五十一)mysql 主從配置