標籤:mysql主從配置
在原來LNMP 的環境下
[[email protected] ~]# vim /etc/init.d/mysqld #尋找資料庫的安裝路徑
[[email protected] ~]# cd /data/mysql/
[[email protected] mysql]# ls
[[email protected] mysql]# tar czvf discuz.tar /data/mysql/discuz/
#備份之前的discuz 論壇資料庫表。
-----------------------------------------------------------------------
安裝mysql:
[[email protected] mysql]# rm -rf /usr/local/mysql #刪除之前的安裝
[[email protected] mysql]# cd /usr/local/src/
[[email protected] src]# tar zxvf mysql-5.1.73-linux-x86_64-glibc23.tar.gz
[[email protected] src]# mv mysql-5.1.73-linux-x86_64-glibc23 /usr/local/mysql
[[email protected] src]# ls /usr/local/mysql
bin COPYING data docs include INSTALL-BINARY lib man mysql-test README scripts share sql-bench support-files
[[email protected] src]# grep ‘mysql‘ /etc/passwd #檢查有沒有 mysql 這個使用者,如果沒有就建立
mysql:x:500:500::/home/mysql:/sbin/nologin
[[email protected] mysql]# cp support-files/my-small.cnf /etc/my.cnf #拷貝設定檔
cp: overwrite `/etc/my.cnf‘? y
[[email protected] mysql]# cp support-files/mysql.server /etc/init.d/mysqld
cp: overwrite `/etc/init.d/mysqld‘? y
[[email protected] ~]# vim /etc/init.d/mysqld #編譯mysql設定檔
basedir=/usr/local/mysql #安裝路徑
datadir=/data/mysql #資料庫路徑
[[email protected] mysql]# rm -rf /data/mysql #刪除原來的/datadir
[[email protected] mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
#初始化 ,看到下面兩個OK,則安裝完成
[[email protected] mysql]# echo $?
0
[[email protected] mysql]# ls /data/mysql #安裝無誤會產生這兩個目錄
mysql test
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/8B/75/wKiom1hOccXyoN-tAAC2hU9Ivrg893.jpg" title="q2.jpg" alt="wKiom1hOccXyoN-tAAC2hU9Ivrg893.jpg" />
[[email protected] ~]# /etc/init.d/mysqld start #啟動mysql
[[email protected] ~]# ps aux |grep mysql #查看
[[email protected] ~]# netstat -lnp |grep 3306
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/8B/70/wKioL1hOZ32TEmyDAAFlcvOyU_E924.jpg" title="q1.jpg" alt="wKioL1hOZ32TEmyDAAFlcvOyU_E924.jpg" />
----------------------------------------分割線----------------------------------------
[[email protected] ~]# cd /usr/local/
[[email protected] local]# ls
bin etc games include jdk1.8.0_112 lib lib64 libexec man mysql nginx php pureftpd resin sbin share src tomcat
[[email protected] local]# cp -r mysql mysql_slave #建立第二個mysql (複製)
[[email protected] mysql_slave]# chown -R mysql:mysql /data/mysql_slave #
[[email protected] mysql_slave]# cp /etc/my.cnf . #拷貝設定檔到mysql_slave 下
[[email protected] mysql_slave]# vim my.cnf #編譯設定檔
# The MySQL server
[mysqld]
port = 3307 #3306 改為3307
socket = /tmp/mysql_slave.sock #/tmp/mysql.sock改為/tmp/mysql_slave.sock
datadir = /data/mysql_slave #定義資料庫的目錄
[[email protected] mysql_slave]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql_slave #初始化資料庫
[[email protected] mysql_slave]# cd /etc/init.d/
[[email protected] init.d]# cp mysqld mysqldslave #複製開機檔案
[email protected] init.d]# vim mysqldslave #編譯開機檔案
basedir=/usr/local/mysql_slave #mysql 更改為mysql_slave
datadir=/data/mysql_slave #mysql 更改為mysql_slave
conf=/$basedir/my.cnf #(這一條也可以寫在這裡)
# Try to find basedir in /etc/my.cnf
conf=/$basedir/my.cnf #更改conf=/etc/my.cnf 為 conf=/$basedir/my.cnf
-----------------------------------------------------------------------
[[email protected] init.d]# /etc/init.d/mysqldslave start
Starting MySQL. SUCCESS!
[[email protected] init.d]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
[[email protected] init.d]# netstat -lnp |grep mysql #兩個mysql 都啟來了
#擴充,如查需求還要啟動一個mysql怎麼解決
?按照開始的配置重新再配置即可。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/8B/79/wKiom1hOrtvixaJYAAFXCy7jjDk048.jpg" title="q3.jpg" alt="wKiom1hOrtvixaJYAAFXCy7jjDk048.jpg" />
(因為樓主是LNMP 的環境下來搭建的,在這過程中出現了的些差錯,由於樓主是個初學小白,排錯的經驗少了點,這之前出個兩個問題,一是mysql帳戶登不了,二是第二個mysql 初始化的時候不成功。
mysql登不了,是沒有賦權,賦權就好了[[email protected] mysql_slave]# chown -R mysql:mysql /data/mysql_slave 。初始化不成功)
---------------------------------------------------------------------------------
Mysql 主從配置:主是3306 從是3307
登入mysql 的幾種方工
[[email protected] ~]# which mysql
/usr/bin/mysql #樓主預裝了mysql 的命令
[[email protected] ~]# /usr/local/mysql/bin/mysql #如果沒有預裝,就用絕對路徑來登mysql
(把mysql安裝目錄,比如MYSQLPATH/bin/mysql,映射到/usr/local/bin目錄下:
# cd /usr/local/bin
# ln -fs /MYSQLPATH/bin/mysql mysql)
[[email protected] ~]# mysql -S /tmp/mysql.sock #通過連接埠登入
[[email protected] ~]# mysql #直接命令登入
[[email protected] ~]# mysql -S /tmp/mysql_slave.sock #3307 的登入
[[email protected] ~]# mysql -h127.0.0.1 -P3307 #通過連接埠登,(大P)
------------------------------------------------------------
[[email protected] ~]# mysql -S /tmp/mysql.sock
mysql> create database db1; #建立一個測試資料庫
Query OK, 1 row affected (0.05 sec)
[[email protected] ~]# mysqldump -S /tmp/mysql.sock mysql > 123.sql #拷貝一些測試資料
-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
[[email protected] ~]# mysql -S /tmp/mysql.sock db1 < 123.sql #恢複資料到db1
mysql> use db1;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_db1 |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| servers |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
23 rows in set (0.00 sec)
[[email protected] ~]# vim /etc/my.cnf #配置主的設定檔
server-id = 1 #開啟server-id,這個數值主和從不能一樣
og-bin=mysql-bin #開啟log-bin,檔案名稱是可以自訂的,樓主改為"rizhi"。
binlog-do-db=db1 #只針對db1做主從,後面可以跟多個庫
#擴充(binlog-ignore-db=mysql,如果有上百個庫,可以反向思考,做個黑名單,指定不同步的庫mysql)
[[email protected] ~]# /etc/init.d/mysqld restart #配置完成後,重啟Mysql
Shutting down MySQL... SUCCESS!
Starting MySQL. SUCCESS!
[[email protected] ~]# ls /data/mysql #系統會產生一個mysql-bin 為首碼的檔案
db1 ibdata1 ib_logfile0 ib_logfile1 LNMP.err LNMP.pid mysql mysql-bin.000001 mysql-bin.index test
[[email protected] ~]# mysql -S /tmp/mysql.sock #登入主,建立使用者 replication:許可權 ,repl:使用者名稱
mysql> grant replication slave on *.* to ‘repl‘@‘127.0.0.1‘ identified by ‘123456‘;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges; #重新整理許可權
Query OK, 0 rows affected (0.00 sec)
mysql> flush tables with read lock; #鎖死讀的許可權
Query OK, 0 rows affected (0.00 sec)
mysql> show master status; #查看mrizhi.0000001 的相關資料,在配置從同步的時候會用到
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/8B/7D/wKiom1hPfuOwVEcRAAB8i11Nilc572.jpg" title="m1.jpg" alt="wKiom1hPfuOwVEcRAAB8i11Nilc572.jpg" />
-----------------------------------------
[[email protected] ~]# vim /usr/local/mysql_slave/my.cnf #從的配置
server-id = 1111 #開啟server-id,且自訂更改1111
#replicate-do-db=db1(擴充)
[[email protected] ~]# ls
123.sql anaconda-ks.cfg install.log install.log.syslog opt www.blog-andy.com.conf
[[email protected] ~]# mysql -S /tmp/mysql_slave.sock -e "create database db1" #在從上建立db1
[[email protected] ~]# mysql -S /tmp/mysql_slave.sock db1<123.sql
# 要實現同步,就要保證這兩台機上庫是一樣的
[[email protected] ~]# mysql -S /tmp/mysql_slave.sock #登入從
mysql> slave stop; #關掉資料庫
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=‘repl‘, master_password=‘123456‘,master_log_file=‘rizhi.000001‘, master_log_pos=106;
Query OK, 0 rows affected (0.04 sec)
#這是個關鍵核心配置,文法拼字,一定要嚴謹。
mysql> slave start; #啟動從
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status\G; #查看狀態 #沒有配置成功
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/8B/79/wKioL1hPg2mQ1WEwAAFQUgWCNqU098.jpg" title="m2.jpg" alt="wKioL1hPg2mQ1WEwAAFQUgWCNqU098.jpg" />
查看下面的報錯:
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
[[email protected] ~]# /etc/init.d/mysqldslave restart #重啟從,剛才修改了server-id 沒有重啟
[[email protected] ~]# mysql -S /tmp/mysql_slave.sock
mysql> show slave status\G;
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/8B/7D/wKiom1hPhGvhAPijAAD9koCFkPw218.jpg" title="m3.jpg" alt="wKiom1hPhGvhAPijAAD9koCFkPw218.jpg" />
------------------------------------------------------
主從測試:
在主上的操作:
(mysql> flush tables with read lock; #因為之前有鎖死的操作)
mysql>unlock tables; #解鎖讀的許可權
mysql> use db1;
Database changed
mysql> show tables;
mysql> drop table help_category;
在從上的操作:
mysql> use db1;
Database changed
mysql> show tables;#詳情見,同步成功。
650) this.width=650;" src="http://s4.51cto.com/wyfs02/M01/8B/7D/wKiom1hPiWqRoOT1AAE-5Bf-Ax4870.jpg" title="m4.jpg" alt="wKiom1hPiWqRoOT1AAE-5Bf-Ax4870.jpg" />
在主上的操作: 建立表
mysql> show create table user\G: #用user表做範例
Create Table: CREATE TABLE `user` (
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT ‘‘,
`User` char(16) COLLATE utf8_bin NOT NULL DEFAULT ‘‘,
`Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT ‘‘,
`Select_priv` enum(‘N‘,‘Y‘) CHARACTER SET utf8 NOT NULL DEFAULT ‘N‘,
`Insert_priv` enum(‘N‘,‘Y‘) CHARACTER SET utf8 NOT NULL DEFAULT ‘N‘,
`Update_priv` enum(‘N‘,‘Y‘) CHARACTER SET utf8 NOT NULL DEFAULT ‘N‘,
`Delete_priv` enum(‘N‘,‘Y‘) CHARACTER SET utf8 NOT NULL DEFAULT ‘N‘,
`Create_priv` enum(‘N‘,‘Y‘) CHARACTER SET utf8 NOT NULL DEFAULT ‘N‘,
。。。。。。下略
CREATE TABLE `linuxt`
(
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT ‘‘,
`User` char(16) COLLATE utf8_bin NOT NULL DEFAULT ‘‘,
`Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT ‘‘,
`Select_priv` enum(‘N‘,‘Y‘) CHARACTER SET utf8 NOT NULL DEFAULT ‘N‘,
`Insert_priv` enum(‘N‘,‘Y‘) CHARACTER SET utf8 NOT NULL DEFAULT ‘N‘,
`Update_priv` enum(‘N‘,‘Y‘) CHARACTER SET utf8 NOT NULL DEFAULT ‘N‘,
`Delete_priv` enum(‘N‘,‘Y‘) CHARACTER SET utf8 NOT NULL DEFAULT ‘N‘,
`Create_priv` enum(‘N‘,‘Y‘) CHARACTER SET utf8 NOT NULL DEFAULT ‘N‘,
。。。。。。。。。。。
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT=‘Users and global privileges‘;
#在結尾去加分號“;”在命名表名的時候不要有數字,樓主開始的表名內有數字,總是報錯。
mysql> use db1;
mysql> show tables;
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/8B/7F/wKiom1hPm1PzW_X0AAExAIYClBs691.jpg" title="m5.jpg" alt="wKiom1hPm1PzW_X0AAExAIYClBs691.jpg" />
刪除資料庫操作:在從上同步成功。
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/8B/7F/wKiom1hPndaBkkhhAAFDJPsQSfw775.jpg" title="m6.jpg" alt="wKiom1hPndaBkkhhAAFDJPsQSfw775.jpg" />
----------------------------------------------------------------------
mysql 的主從機制相當的脆弱,很容易就中斷了,樓主在實驗的過程中,不小心在從上進行了資料表的建立,最後發現不對。回到主上現來操作,發現建立不了,最後只能重新恢複資料表,再重新操作。
在實際生產環境中,做監控。
Slave_IO_Running: Yes #監控這兩項是不是YES
Slave_SQL_Running: Yes
Last_IO_Error: (查看此處有沒有報錯)
一定不要在從上去寫資料,這樣操作會導致資料庫紊亂。
本文出自 “CBO#Boy_Linux之路” 部落格,請務必保留此出處http://20151213start.blog.51cto.com/9472657/1882281
Mysql主從配置