cacti mysql数据库的备份步骤如下:
为了防止cacti mysql数据库损坏导致的问题,在另一服务器上建立从服务器,现记录步骤
1 建立从数据库
groupadd mysql
useradd -g mysql mysql
./configure --prefix=/cache/mysql --enable-assembler --enable-largefile --with-extra-charsets=all
make
make install
cp support-files/my-medium.cnf /etc/my.cnf
bin/mysql_install_db --user=mysql --datadir=/cache/mysql/var/
#在/cache/mysql/var/下 建立mysql数据库,属主为mysql
chgrp -R mysql .
将mysql文件夹下的属组变为mysql
启动mysql
. mysql/bin/mysqld_safe
将mysql设置为自动启动
cp support/mysql.server /etc/rc.d/init.d/mysqld
chown root.root /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld restart
设置mysql root用户的密码
./bin/mysqladmin -u root password 123456
从服务器配置完毕。
#p#
2 同步的建立
2.1 主服务器上的更改
vi /etc/my.cnf
log-bin #启动支持replication的二进制日志
binlog-do-db=cacti #指出要备份的数据库名称
server-id=1 #指出此数据库为主数据库
binlog-ignore-db=mysql #不备份mysql数据库
注意:如果想做复杂的结构:比如说A备份到B,B再备份到C,那么B除了打开log-bin,还要打开log-slave-updates
2.2 从服务器上的配置更改
vi /etc/my.cnf
server-id=2
master-host=主机
master-user=用户名
master-password=密码
master-port=端口
replicate-do-db=需要复制的数据名
replicate-ignore-db=需要复制的数据库名
2.3 在主数据库上建立同步用户。
grant replication slave on *.* to qxt@"%" identified by "qxt";
grant replication client,reload,super on *.* to qxt@"%"
flush privileges;
#修改权限后需要刷新才能生效
2.4 利用热备份将本地数据库拷贝到从数据库上
2.4.1 数据库的导出
mysqldump -u root -p cacti > /root/cacti.sql
#mysqldump将cacti数据库的所有数据导出
scp /root/cacti.sql IP:/root
#将主数据库文件拷贝到从数据库所在的机器上
并在上面执行
mysql -u root -p cacti < /root/cacti.tzt
#装载数据库
2.5 锁住主数据库保证备份时没有数据进入主库干扰备份
flush tables with read lock;
停止主服务器上的mysql服务
mysqladmin -u root shutdown
注意:如果表的类型只是mylsam,可以不停止mysql数据库,但复制过程中要锁住,如果表类型是InnoDB则必须停止主数据库。查看)(show table status from cacti;)
2.6 查看主库状态
show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000008 | 59170349 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
2.7 启动复制过程
start slave;
2.8 解锁
unlock tables;
#p#
2.9 测试
1 在从数据库上
mysql > show slave status\G;
Slave_IO_Running: Yes #IO同步成功
Slave_SQL_Running: Yes #数据库同步成功
2 因为是主从数据库,所以在主数据库中插入数值,从数据库就会同步过去。
例子: 在主数据库中插入test表
mysql> use cacti;
mysql> create table test(i int)
#在test中插入一个值为1
mysql> insert into test values(1);
mysql> commit;
#确认
查询一下是否插入
select * from test;
+------+
| i |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
进入从数据库检查:
mysql> use cacti;
Database changed
mysql> select * from test;
+------+
| i |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
实验证明从数据库已经复制过来了。
附: mysql> show processlist\G 查看从主数据库和从数据库复制的相关进程
mysql> show processlist\G;
*************************** 1. row ***************************
Id: 1
User: system user
Host:
db: NULL
Command: Connect
Time: 5159
State: Waiting for master to send event
Info: NULL
*************************** 2. row ***************************
Id: 2
User: system user
Host:
db: NULL
Command: Connect
Time: 81
State: Has read all relay log; waiting for the slave I/O thread to update it
Info: NULL
*************************** 3. row ***************************
Id: 4
User: root
Host: localhost
db: NULL
Command: Sleep
Time: 1166
State:
Info: NULL
问题解决
Slave_SQL_Running: No
1.程序可能在slave上进行了写操作
2.也可能是slave机器重起后,事务回滚造成的.
一般是事务回滚造成的:
解决办法:
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
解决办法二、
首先停掉Slave服务:slave stop
到主服务器上查看主机状态:
记录File和Position对应的值
进入master
mysql> show master status;
+----------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+----------+--------------+------------------+
| localhost-bin.000094 | 33622483 | | |
+----------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
然后到slave服务器上执行手动同步:
mysql> change master to
> master_host='master_ip',
> master_user='user',
> master_password='pwd',
> master_port=3306,
> master_log_file='localhost-bin.000094',
> master_log_pos=33622483 ;
1 row in set (0.00 sec)
mysql> slave start;
解决3 有些是日志错误造成的。
方法删掉数据库日志。
指定正确的日志位置和名称,再做同步。
通过上面的数据,我们知道如何进行cacti mysql数据库的备份!希望你们能学会,以便预防问题的出现!
【编辑推荐】