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
.測試