标签:
一、安装MySQL
可参考LAMP配置进行安装
二、配置从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
三、配置replication
// 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.设置master
[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.设置slave
[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.测试主从
/*第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
.
标签:
原文地址:http://www.cnblogs.com/frankielf0921/p/5399362.html