mysql是多线程,多用户,到数据库服务,可用性高,性能高,使用易,而且开源。其语法和MSSQL基本一致。以window 7系统为例,搭建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
加上两行:
保存退出。
./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
使用EXIT或QUIT退出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 ‘密码’];
授权表可以为select,insert,updata或是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 //ID为1
log-bin=binlog //启用日志
binlog-do-db=test //指明同步的数据库
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)
可以看到有file和position两项。
解锁数据库表
unlock tables;
从数据从库1服务器上:
修改my.cnf
vim /etc/my.cnf
[mysqld]
server-id=2 //ID为2
保存退出,在从服务器上设置同步:
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_file和master_log_pos要和刚才在主库1服务器上锁定主库表时显示File和Position 的值对应
重启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=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
登录主库2的mysql,赋予主库2在主库1上读取日志。
mysql -uroot -p123456
grant replication slave on . to 'root'@'192.168.78.129'identified by '123456';
然后在主库2上查看file和position
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
然后在两台服务器上分别新建表,就可以测试是否可以两台服务器是否可以同步了。
now,大家可以试一下
end