mysql的搭建与主从(主)备份

      mysql是多线程,多用户,到数据库服务,可用性高,性能高,使用易,而且开源。其语法和MSSQL基本一致。以红冒企业版RHEL5为例,搭建MYSQL,实现主主备份。

一、搭建与使用mysql

1.确定没有装有RPM包,以免冲突。

[root@localhost ~]# rpm -q mysql mysql-server

package mysql is not installed

package mysql-server is not installed

增加用户

useradd -M -u 49 -s /sbin/nologin mysql

解压安装,并进去目录开始编译安装。

tar zxf mysql-5.1.55.tar.gz -C /usr/src

cd /usr/src/mysql-5.1.55/

指定mysql装到/usr/local/mysql,指定只用字符集编码,指定使用字符集校对规则,指定支持额外其他字符集编码。

mysql-5.1.55版本中,其他字符集需要进行一些小调整,才可以获得完整到编译支持,例如:

vim /usr/src/mysql-5.1.55/include/config.h

加上两行:

#define HAVE_CHARSET_gbk 1

#define HAVE_CHARSET_gb2312 1

保存退出。

./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=gbk,gb2312 && make && make install

安装时可能会出现某些环境未建立,则需要搭建好系统环境,再编译安装。而安装到test的时候,等待时间较长,那是测试,其实已经安装好了。

2.安装好了,建立配置文件。一般选择my-medium.cnf文件即可。

cp /usr/src/mysql-5.1.55/support-files/my-medium.cnf /etc/my.cnf

初始化数据库

cd /usr/local/mysql/bin/

./mysql_install_db --user=mysql        //指定mysql用户运行。

chown -R root:mysql /usr/local/mysql/

chown -R mysql /usr/local/mysql/var

优化执行路径,程序路径等

ln -s /usr/local/mysql/bin/* /usr/local/bin/

ln -s /usr/local/mysql/lib/mysql/* /usr/lib/

ln -s /usr/local/mysql/include/mysql/* /usr/include/

添加系统服务

cd /usr/src/mysql-5.1.55/

cp support-file/mysql.server /etc/rc.d/init.d/mysqld

chmod a+x /etc/rc.d/init.d/mysqld

chkconfig --add mysqld

这样之后,可以使用以下命令:

service mysqld start

/etc/init.d/mysqld start

来启动mysqld

3.登录到mysql服务器

[root@localhost ~]# mysql -u root        //指定认证用户 -u

使用EXITQUIT退出MYSQL命令工具,返回原来到shell

一些基本的操作语句:

查看当前服务器有那些库:mysql > SHOW DATABASES;

查看当前使用到库有哪些表:mysql > USE mysql;      //使用mysql

                                                     mysql > SHOW TABLES;

查看表结构:mysql > USE mysql;

                            mysql > DESCRIBE user;             //或者直接使用mysql > DESCRIBE mysql.user;

新建库:

CREATE DATABASE test;        //新建test

新建表:

CREATE TABLE 表名(字段1名称类型, 字段2名称类型, ...., PRIMARY KEY (主键名));

例:CREATE TABLE user (user_name CHAR (16) NO NULL, user_passwd CHAR(48) DEFAULT '' , PRIMARY KEY (user_name));

删除表:

需要指定库名.表明,例如:

mysql > DROP TABLE test.user

删除库:

mysql > DROP DATABASE test;

增,删,改,查:

INSERT INTO 表名(字段1,字段2,.... VALUES (字段1的值,字段2的值,....);

DELETE FROM 表名 WHERE 条件格式;

UPDATE 表名 SET 字段名1=字段值[,字段名2=字段值2] WHERE 条件表达式;

SELECT 字段名1,字段名2,....FROM 表名 WHERE 条件表达式;

 

 

二、维护数据库:

1.授权:GRANT 授权表 ON 库名.表明 TO 用户@来自地址 [ IDENTIFIED BY ‘密码’];

授权表可以为selectinsertupdata或是all;库名表名可以使用*表示所有;用户地址可以用%通配符,%@192.168.78.129[email protected].%;密码若有就打上。

如果是其他主机登录到mysql服务器,需要授权,并在客户机用 -h 选项来指定目标主机地址。

查看授权:SHOW GRANTS FOR 用户@来自地址

撤销授权:REVOKE 授权表 ON 库名.表名 FROM 用户@来自地址

备份数据库,可以直接打包数据库文件夹/var/local/mysql/var/

tar czvf mysql.tar.gz /var/lib/mysql/*

scp mysql.tar.gz 192.168.78.130:/var/lib/mysql           //将数据库打包传给另外服务器

 

三、一般数据库服务器不止一台,两台数据库服务器以上可以有效防止数据瘫痪。因此备份一般是主主备份和主从备份。

1.在两台mysql中,主从备份:主数据库为主库1,从数据库为从库1;主主备份:主数据库为主库1和主库2,主库2为主从备份的从库。主为192.168.78.129,从为192.168.78.130.

为超级管理员设置密码:

[root@localhost ~]# mysqladmin -u root password '123456'

实际环境中,密码应该符合复杂性并且两台服务器密码不同。

2.主从备份:

在主库1服务器上:

新建数据库和表(测试用的库与表)

mysql -uroot -p123456

create database test;

use test;

create table users(id int(4),user nvarchar(20));

quit

赋权给从服务器,让其有读取日志等权限

mysql -uroot -p123456

grant replication slave on *.* to 'admin'@'192.168.78.130' identified by '123456';

修改配置文件,主要修改不同到ID,以及同步数据库名字。

vim /etc/my.cnf

[mysqld]

....//

server-id=1         //ID1

log-bin=binlog    //启用日志

binlog-do-db=test    //指明同步的数据库

#replicate-ignore-db=nothing    //指明不同步的数据库

replicate-ignore-db=mysql

replicate-ignore-db=information_schema

port=3306

.....//

保存退出,重启服务

service mysqld restart

锁主库1

mysql > flush tables with read lock;

+---------------+----------+--------------+------------------+

| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+---------------+----------+--------------+------------------+

| binlog.000001 |      208 |              |                  |

+---------------+----------+--------------+------------------+

1 row in set (0.00 sec)

可以看到有fileposition两项。

解锁数据库表

unlock tables

从数据从库1服务器上:

修改my.cnf

vim /etc/my.cnf

[mysqld]

#slave            //声明为从库1服务器

server-id=2      //ID2

#master-host=172.16.70.129          //声明主库1服务器地址

#master-user=root                        //声明主库用户

#master-password=123456            //声明用户密码

保存退出,在从服务器上设置同步:

mysql -u root -p123456

mysql > slave stop;

mysql> change master to master_host='192.168.78.129',master_user='root',master_password='123456',master_log_file='binlog.000001',master_log_pos=208;

其中master_log_filemaster_log_pos要和刚才在主库1服务器上锁定主库表时显示FilePosition 的值对应

重启sql服务

service mysqld restart

然后在数据库查看有没有开启同步。

mysql > show slave status \G;

找到两行为YES即可!!:

Slave_IO_Running:YES

Slave_SQL_Running:YES

然后测试,在主库1服务器上建立表,切换到从库1服务器show一下,看看会不会立即同步。

3.主主备份。

建立在主从备份基础上,即主服务器亦是从服务器,从服务器亦是主服务器。

在主库2,(即之前的从库1),修改配置文件。

vim /etc/my.cnf

加入如下内容:

binlog-do-db=test

#replicate-ignore-db=nothing       //不同步的库

replicate-ignore-db=mysql

replicate-ignore-db=information_schema

port=3306

赋权给主库1服务器,让其有读取日志等权限

mysql -uroot -p123456

grant replication slave on *.* to 'admin'@'192.168.78.129' identified by '123456';

重启mysql服务

service mysqld restart

登录主库2mysql,赋予主库2在主库1上读取日志。

mysql -uroot -p123456

grant replication slave on *.* to 'root'@'192.168.78.129'identified by '123456';

然后在主库2上查看fileposition

mysql > show master status;

在主库1上登录数据库:

mysql > slave stop;

mysql > CHANGE MASTER TO MASTER_HOST='192.168.78.130',MASTER_USER='root',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='binlog.000004',MASTER_LOG_POS=106;

mysql > slave start;

重启sql服务

service mysqld restart

同样查看有没有开启同步,两行为YES即可;

mysql>show slave status\G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

然后在两台服务器上分别新建表,就可以测试是否可以两台服务器是否可以同步了


你可能感兴趣的:(mysql,主从备份)