主服务器安装 [root@tiejiang1 ~]# yum -y install mysql mysql-server mysql-devel //安装mysql数据库必要服务 [root@tiejiang1 ~]# /etc/init.d/mysqld start //启动mysql [root@tiejiang1 ~]# chkconfig mysqld on //设为开机启动 [root@tiejiang1 ~]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf //拷贝配置文件(注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可) [root@tiejiang1 ~]# mysql_secure_installation //为root帐户设置密码 回车,根据提示输入"y"。输入2次密码,回车。根据提示一路输入"y" 最后出现"Thanks for using MySQL!" mysql密码设置完成,重新启动mysql [root@tiejiang1 ~]# /etc/init.d/mysqld restart //重启mysql服务
从服务器安装 [root@tiejiang2 ~]# yum -y install mysql mysql-server mysql-devel //安装mysql数据库必要服务 [root@tiejiang2 ~]# /etc/init.d/mysqld start //启动mysql [root@tiejiang2 ~]# chkconfig mysqld on //设为开机启动 [root@tiejiang2 ~]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf //拷贝配置文件(注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可) [root@tiejiang2 ~]# mysql_secure_installation //为root帐户设置密码 回车,根据提示输入"y"。输入2次密码,回车。根据提示一路输入"y" 最后出现"Thanks for using MySQL!" mysql密码设置完成,重新启动mysql [root@tiejiang2 ~]# /etc/init.d/mysqld restart //重启mysql服务
1. mysql数据库版本最好一致 2. 初始化表,并在后台启动mysql 3. 修改root密码
[root@tiejiang1 ~]# vim /etc/my.cnf log-bin=mysql-bin //必须启用二进制日志 server-id = 7 //服务器唯一ID,默认是1,一般取IP最后一段
[root@tiejiang2 ~]# vim /etc/my.cnf log-bin=mysql-bin //必须启用二进制日志 server-id = 22 //服务器唯一ID,默认是1,一般取IP最后一段
[root@tiejiang1 ~]# service mysqld restart //主服务器 [root@tiejiang2 ~]# service mysqld restart //从服务器
[root@tiejiang1 ~]# mysql -uroot -pyuanfei123 mysql> GRANT REPLICATION SLAVE ON *.* to '163ns'@'%' identified by '123456'; ////一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.163.22,加强安全。
[root@tiejiang2 ~]# mysql -uroot -pyuanfei321 mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000002 | 249 | | | +------------------+----------+--------------+------------------+ 注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。
[root@tiejiang2 ~]# mysql -uroot -pyuanfei321 mysql> change master to master_host='192.168.163.7',master_user='163ns',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=249; //注意不要断开,249数字前后无单引号。 mysql> start slave; //启动从服务器复制功能
[root@tiejiang2 ~]# mysql -uroot -pyuanfei321 mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.163.7 //主服务器地址 Master_User: 163ns //授权帐户名,尽量避免使用root Master_Port: 3306 //数据库端口,部分版本没有此行 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 249 //同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 251 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes //此状态必须YES Slave_SQL_Running: Yes //此状态必须YES ...............................
主服务器Mysql,建立数据库,并在这个库中建表插入一条数据
[root@tiejiang1 ~]# mysql -uroot -pyuanfei123 mysql> create database hi_db; Query OK, 1 row affected (0.00 sec) mysql> use hi_db; Database changed mysql> create table hi_tb(id int(3),name char(10)); Query OK, 0 rows affected (0.00 sec) mysql> insert into hi_tb values(001,'bobu'); Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | hi_db | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec)
[root@tiejiang2 ~]# mysql -uroot -pyuanfei321 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | hi_db | //I'M here,大家看到了吧 | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> use hi_db Database changed mysql> select * from hi_tb; //查看主服务器上新增的具体数据 +------+------+ | id | name | +------+------+ | 1 | bobu | +------+------+ 1 row in set (0.00 sec)
编写一shell脚本,用nagios监控slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或零个yes,就表明主从有问题了,发短信警报吧。
#!/bin/bash port=`netstat -anl|grep 3306 |sed -n '1p' |awk '{print $4}'|awk -F: '{ print $2}'` array=($(mysql -uroot -p123 -e "show slave status\G"|grep "Running" |awk '{print $2}')) if ["$port" == "3306"] then if [ "${array[0]}" == "Yes" ] || [ "${array[1]}" == "Yes" ] then echo "slave is OK" else echo "slave is error" fi fi