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

然後在兩臺服務器上分別新建表,就可以測試是否可以兩臺服務器是否可以同步了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章