標籤:com linu position stat 需要 參數 工作 mysql使用者 讀鎖
寫得不是很好,希望大家多多吐槽 >__<
mysql主從總結一、原理(1)流程A --- change data ---> 記錄bin_log ---> transfer(傳到) ----> B ---> repl_log(記錄自己的從日誌repl_log) ----> change data(更改自己的資料)(2)說明主mysql進行操作(create,update,insert,delete。。。),記錄二進位log檔案(bin_log )然後把日誌推到從上去,從接收到主日誌後,修改自己的 replay_log
二、實驗、一台機器跑兩個mysql服務
(i)準備工作
一、安裝主mysql
主(master):3306 mysql
從(slave) :3307 mysql_slave(1)刪除原來已安裝的mysqlrm -rf /usr/local/mysql rm -rf /data/mysql (2)安裝主mysql解壓: tar zxvf mysql-5.1.49-linux-i686-glibc23.tar.gz移動: mv mysql-5.1.49-linux-i686-glibc23 /usr/local/mysql (3)檢查有沒有mysql使用者grep ‘mysql‘ /etc/passwd (沒有則建立: useradd -s /sbin/nologin mysql ) (4)拷貝設定檔,啟動指令碼cd /usr/local/mysqlcp support-files/my-small.cnf /etc/my.cnfcp support-files/mysql.server /etc/init.d/mysqld編輯 mysqldbasedir=/usr/local/mysqldatadir=/data/mysql (5)初始化(之後會在 /data/mysql 下有 2 個目錄mysql, test)./scripts/mysql_install_db --user=mysql --datadir=/data/mysql (6)啟動主mysql/etc/init.d/mysqld start
二、安裝從mysql(0)複製mysql解壓目錄到從上cp -r /usr/local/mysql /usr/local/mysql_slave (1)複製主的設定檔cp /etc/my.cnf /usr/local/mysql_slave/ (2)修改從設定檔:vim my.cnfport=3307socket=/tmp/mysql_slave.sockdatadir=/data/mysql_slave (3)初始化操作./scripts/mysql_install_db --user=mysql --datadir=/data/mysql_slave (4)修改從啟動指令碼cp /etc/init.d/mysqld /etc/init.d/mysqldslave修改:basedir=/usr/local/mysql_slavedatadir=/data/mysql_slaveconf=$basedir/my.cnf (2個地方,#Try to find basedir in /etc/my.cnf 也需要改) (5)儲存啟動從/etc/init.d/mysqldslave start 科普:登入mysql的2種方式(1)host+連接埠 mysql -h127.0.0.1 -P3306 (主)mysql -h127.0.0.1 -P3307 (從)(2)socketmysql -S /tmp/mysql.sock(主)mysql -S /tmp/mysql_slave.sock(從)ps:直接mysql是登入主
(ii)主從配置一、主mysql建立測試資料庫並匯入資料(1)登入主,建立測試資料庫db1mysql ——》 create database db1;(2)匯出主mysql庫的資料給db1mysqldump -S /tmp/mysql.sock mysql > 123.sqlmysql -S /tmp/mysql.sock db1 < 123.sql 二、配置主(1)修改設定檔vim /etc/my.cnf (a)server-id=1 (b)log-bin=windysai (名字隨便) (c)選擇性參數binlog-ignore-db=mysql (不同步mysql庫)(binlog-do-db=db1,db2:只針對db1,db2做主從) (2)重啟主mysql/etc/init.d/mysqld restart(ls /data/mysql 會產生bin_log——2個檔案:windysai.000001,windysai.index) (3)進入主mysql,授權傳輸bin_log的repl (a)登入主 mysql (b)grant replication slave on *.* to ‘repl‘@‘127.0.0.1‘ identified by ‘123456‘; (4)把表的讀鎖死flush tables with read lock; (5)show master status; (記下File 和 Position的值) 三、配置從(1)vim /usr/local/mysql_slave/my.cnf (ps:不在/etc/init.d/目錄下) (a)server-id = 111 (和主要不同!) (b)選擇性參數 replicate-do-db=db1,db2 replicate-ignore-db=mysql (2)拷貝主上的庫db1(保證主從的庫是一樣的) (a)mysql -S /tmp/mysql_slave.sock -e "create database db1" (b)mysql -S /tmp/mysql_slave.sock db1 <123.sql
(iii)實現同步並測試
一、從mysql設定(1)登入從mysql -S /tmp/mysql_slave.sock(2)關閉從:slave stop(3)change master to master_host=‘127.0.0.1‘, master_port=3306, master_user=‘repl‘, master_password=‘123123‘, master_log_file="jiayi.000001‘, master_log_pos=106;(4)重啟從mysql/etc/init.d/mysqldslave restart(5)重新登入從mysql(6)開啟從: slave start(7)查看狀態show slave status\G; (2個yes)
(iv)測試主從
一、
主mysql登入: mysql(1)主mysql 解鎖表的讀read lockunlock tables;(2)刪除 db1 的某些表use db1; show tables;drop tables help_category;
二、從登入: mysql -S /tmp/mysql_slave.sock -P3307(1)查看db1庫的tables,發現 沒有 help_categoryuse db1;show tables; (2)從把db1庫的proc表刪除drop table proc; (主上看沒有了proc)(3)從建立表jiayilinuxshow create table `jiayilinux` ....(參考 show create table user\G;)(4)刪除整個資料庫db1drop database db1;
(v)總結Mysql的主從機制比較脆弱,謹慎操作。如果重啟主的mysql,務必把從停掉(slave stop)然後再重啟主mysql服務,從再開啟(slave start)否則有可能會中斷
總結mysql主從