MySQL主從配置

1、安裝MySQLmysql

可參考LAMP配置進行安裝sql

 

2、配置從MySQL數據庫

//當搭建好一個跑3306端口的MySQL後,再搭建一個3307端口的MySQL2
[root@localhost ~]# cd /usr/local/
[root@localhost local]# cp -r mysql mysql_2
[root@localhost local]# cd mysql_2
[root@localhost mysql_2]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql2
[root@localhost mysql_2]# cp /etc/my.cnf  ./my.cnf
[root@localhost mysql_2]# vim my.cnf
...
[mysqld]
port = 3306 //改成 3307
socket = /tmp/mysql.sock  //改成/tmp/mysql2.sock
//再添加一行
datadir = /data/mysql2
...
...
//啓動
[root@localhost mysql_2]# cd bin/
[root@localhost bin]# ./mysqld_safe --defaults-file=../my.cnf --user=mysql &
[root@localhost bin]# echo "./mysqld_safe --defaults-file=../my.cnf --user=mysql &" >>/etc/rc.d/rc.local      //加入自動啓動服務

//查看是否啓動了2個MySQL
[root@localhost ~]# netstat -lnp |grep mysqld
tcp        0      0 0.0.0.0:3306                0.0.0.0:*    LISTEN      3169/mysqld
tcp        0      0 0.0.0.0:3307                0.0.0.0:*    LISTEN      3037/mysqld
unix  2      [ ACC ]     STREAM     LISTENING     29027  3037/mysqld    /tmp/mysql2.sock
unix  2      [ ACC ]     STREAM     LISTENING     29155  3169/mysqld    /tmp/mysql.sock

 

 

3、配置replicationvim

// 3307 --主master   ,3306 --從slave

//實驗: 先在master上建立庫db1,並把庫數據複製給slave
[root@localhost bin]# mysql -uroot -S /tmp/mysql2.sock
mysql> create database db1;
Query OK, 1 row affected (0.01 sec)

mysql> quit
Bye
//數據備份
[root@localhost bin]# mysqldump -uroot -S /tmp/mysql2.sock mysql > 123.sql
[root@localhost bin]# mysql -uroot -S /tmp/mysql2.sock db1 < 123.sql

 

1.設置mastersocket

[root@localhost ~]# vim /usr/local/mysql_2/my.cnf
...
[mysqld]
//查看是否有如下內容,沒有則添加
server-id=1
log-bin=mysql-bin //如下參數可選擇性使用 binlog-do-db=databasename1,databasename2 //須要複製的庫名 binlog-ignore-db=databasename1,databasename2 //不須要複製的庫名 [root@localhost ~]# pid=`ps uax |grep mysql2.sock |grep -v grep |awk '{print $2}'` [root@localhost ~]# kill -0 $pid; sleep 3; kill $pid [root@localhost ~]# cd /usr/local/mysql_2/bin/ [root@localhost bin]# ./mysqld_safe --defaults-file=../my.cnf --user=mysql & [root@localhost ~]# mysqladmin -u root -S /tmp/mysql2.sock password '123456' [root@localhost ~]# mysql -u root -S /tmp/mysql2.sock -p'123456' mysql> grant replication slave on *.* to 'repl'@'127.0.0.1' identified by '123123'; mysql> flush tables with read lock; //鎖定數據庫,此時不容許更改任何數據 mysql> show master status; //查看狀態,這些數據是要記錄的,一會要在slave端用到 +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000006 | 474952 | | | +------------------+----------+--------------+------------------+

 

2.設置slavetcp

[root@localhost ~]# vim /etc/my.cnf
...
//此id不能和master的同樣
server-id = 1  //刪除或改成 server-id = 2
//選擇性添加
replicate-do-db=databasename1,databasename2
replicate-ignore-db=databasename1,databasename2

[root@localhost ~]# service mysqld restart
[root@localhost ~]# mysqldump -uroot -S /tmp/mysql2.sock -p123456 db1 > db1.sql
[root@localhost ~]# mysql -uroot -S /tmp/mysql.sock -pyourpassword -e "create database db1"
[root@localhost ~]# mysql -uroot -S /tmp/mysql.sock -pyourpassword db1 < db1.sql
[root@localhost ~]# mysql -uroot -S /tmp/mysql.sock -pyourpassword
mysql> slave stop;
mysql> 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;
mysql> slave start;
mysql> quit

[root@localhost ~]# mysql -uroot -S /tmp/mysql2.sock -p123456 -e "unlock tables"
[root@localhost ~]# mysql -uroot -S /tmp/mysql.sock 

mysql> show slave status\G;
//確認如下兩項參數都爲YES

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

 

3.測試主從ide

/*第1種測試*/
//在master上執行

[root@localhost ~]# mysql -uroot -S /tmp/mysql2.sock -p123456 -e "use db1;select count(*) from db"
+----------+
| count(*) |
+----------+
|        2 |
+----------+
[root@localhost ~]# mysql -uroot -S /tmp/mysql2.sock -p123456 -e "use db1;truncate table db"
[root@localhost ~]# mysql -uroot -S /tmp/mysql2.sock -p123456 -e "use db1;select count(*) from db"  //晴空了db1庫db表的數據
+----------+
| count(*) |
+----------+
|        0 |
+----------+

//在slave上執行
//從上的表也被清空了
[root@localhost ~]# mysql -uroot -S /tmp/mysql.sock -pyourpassword -e "use db1; select count(*) from db"
+----------+
| count(*) |
+----------+
|        0 |
+----------+

/*第2種測試*/
//主上db表刪除了
[root@localhost ~]# mysql -uroot -S /tmp/mysql2.sock -p123456 -e "use db1; drop table db"
//從上查看 ,表也不見了
[root@localhost ~]# mysql -uroot -S /tmp/mysql.sock -pyourpassword -e "use db1; select count(*) from db"
ERROR 1146 (42S02) at line 1: Table 'db1.db' doesn't exist

 

主從配置起來很簡單,可是這種機制也是很是脆弱的,一旦咱們不當心在從上寫了數據,那麼主從也就被破壞了。另外若是重啓master,務必要先把slave停掉,也就是說須要在slave上去執行 slave stop 命令,而後再去重啓master的mysql服務,不然頗有可能就會中斷了。固然重啓完後,還須要把slave給開啓 slave start.測試

相關文章
相關標籤/搜索