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
使用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=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)
可以看到有file和position兩項。
解鎖數據庫表
unlock tables;
從數據從庫1服務器上:
修改my.cnf
vim /etc/my.cnf
[mysqld]
#slave //聲明爲從庫1服務器
server-id=2 //ID爲2
#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_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=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
登錄主庫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
然後在兩臺服務器上分別新建表,就可以測試是否可以兩臺服務器是否可以同步了