Mysql主從配置

來源:互聯網
上載者:User

標籤: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主從配置

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.