前言 在之前的博客中,有過幾篇都寫了關於mysql在linux下的搭建教程,可能以後還會再寫,但是又不想重覆在寫, 於是便想單獨將此抽出來,單獨寫成一篇博客,並詳細記錄一些安裝過程以及遇到的問題解決辦法。順便也將MySql的主從搭建教程也寫在一起,方便以後查閱。 一、MySql安裝 在安裝MySql ...
前言
在之前的博客中,有過幾篇都寫了關於mysql在linux下的搭建教程,可能以後還會再寫,但是又不想重覆在寫, 於是便想單獨將此抽出來,單獨寫成一篇博客,並詳細記錄一些安裝過程以及遇到的問題解決辦法。順便也將MySql的主從搭建教程也寫在一起,方便以後查閱。
一、MySql安裝
在安裝MySql之前,查看是否以及安裝過MySql,如果已經安裝,但是不符合要求的話就卸載。
1,查找以前是否裝有mysql
先輸入:
rpm -qa|grep -i mysql
查看是否安裝了mysql
2,停止mysql服務、刪除之前安裝的mysql
輸入:
ps -ef|grep mysql
刪除命令
輸入:
rpm -e –nodeps 包名
如果提示依賴包錯誤,則使用以下命令嘗試
rpm -ev 包名 --nodeps
如果提示錯誤:error: %preun(xxxxxx) scriptlet failed, exit status 1
則用以下命令嘗試:
rpm -e --noscripts 包名
3、查找並刪除mysql目錄
查找結果如下:
find / -name mysql
刪除對應的mysql目錄
具體的步驟如圖:查找目錄並刪除
註意:卸載後/etc/my.cnf不會刪除,需要進行手工刪除
4、再次查找機器是否安裝mysql
rpm -qa|grep -i mysql
Mysql有兩種安裝模式,可自行選擇。
1,yum安裝
首先查看mysql 是否已經安裝
輸入:
rpm -qa | grep mysql
如果已經安裝,想刪除的話
輸入:
普通刪除命令:
rpm -e mysql
強力刪除命令:
rpm -e --nodeps mysql
依賴文件也會刪除
安裝mysql
輸入:
yum list mysql-server
如果沒有,則通過wget命令下載該包
輸入:
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
下載成功之後,再輸入命令安裝
yum install mysql-server
在安裝過程中遇到選擇輸入y就行了
安裝成功後,輸入 service mysqld start 啟動服務
輸入:
mysqladmin -u root -p password '123456'
來設置密碼
輸入之後直接回車(預設是沒有密碼的)
然後再輸入
mysql -u root -p
通過授權法更改遠程連接許可權
輸入: grant all privileges on . to 'root'@'%' identified by '123456';
註:第一個’root’是用戶名,第二個’%’是所有的ip都可以遠程訪問,第三個’123456’表示 用戶密碼 如果不常用 就關閉掉
輸入:flush privileges; //刷新
在防火牆關閉之後,使用SQLYog之類的工具測試是否能正確連接
2,編譯包安裝
Mysql文件準備
將下載好的mysql安裝包上傳到linux伺服器
解壓mysql解壓包,並移動到/usr/local目錄下,重命名為mysql。
命令:
tar -xvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.21-linux-glibc2.5-x86_64 /usr/local
cd /usr/local
mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql
註: mysql預設的路徑是就是/usr/local/mysql ,如果安裝的地方更改,需要更改相應的配置文件。
安裝mysql
切換到mysql的目錄 /usr/local/mysql
輸入:
./scripts/mysql_install_db --user=mysql
成功安裝mysql之後,輸入
service mysql start 或 /etc/init.d/mysql start
查看是否啟動成功
輸入:
ps -ef|grep mysql
切換到 /usr/local/mysql/bin 目錄下
設置密碼
mysqladmin -u root password '123456'入mysql
輸入:
mysql -u root -p
設置遠程連接許可權
輸入:
grant all privileges on *.* to 'root'@'%' identified by '123456';
然後輸入:
flush privileges;
說明: 第一個’root’是用戶名,第二個’%’是所有的ip都可以遠程訪問,第三個’123456’表示用戶密碼 如果不常用就關閉掉。
使用本地連接工具連接測試
二、MySql搭建遇到的錯誤解決辦法
1,mysql離線安裝出現:Can't change to run as user 'mysql' ; Please check that the user exists!
原因:沒有該用戶。
解決辦法:創建該用戶!
例如:
添加用戶:
groupadd -g 315 mysql
用戶加入mysql:
useradd -u 315 -g mysql -d /usr/local/mysql -M mysql
再次輸入
./scripts/mysql_install_db --user=mysql
成功!
2,安裝完mysql之後,輸入service mysql start 提示 mysql: unrecognized service。
問題原因: 是因為/etc/init.d/ 不存在 mysql 這個命令,所以無法識別。
解決辦法:
1.首先查找mysql.server文件在哪
輸入:
find / -name mysql.server
2.將mysql.server 複製到/etc/init.d/目錄下,並重命名為mysql或mysqld
輸入:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
3.測試是否可以使用該命令
輸入:
service mysql status
或
service mysqld status
3,mysql數據導入報錯
錯誤:Got a packet bigger than‘max_allowed_packet’bytes的問題
2個解決方法:
1.臨時修改:mysql>set global max_allowed_packet=524288000;修改 #512M
2.永久修改: 編輯my.cnf, 在 [MySQLd] 部分添加一句(如果存在,調整其值就可以):
max_allowed_packet=10M
成功之後重啟mysql。
4,mysql資料庫關於max_allowed_packet的問題
主要是mysql的JDBC連接限制了最大包長度1024B,即1KB
查詢當前資料庫的包長度顯示: show VARIABLES like '%max_allowed_packet%';
修改此參數
解決方案一(臨時): 進入msyql
輸入:
set global max_allowed_packet = 2*1024*10
更改最大值
解決方案二(永久):修改mysql.cnf(windows下my.ini),在[mysqld]段或者mysql的server配置段 進行修改。
max_allowed_packet = 20K。
修改成功後,重啟mysql。
三、MySql 用到的一些命令
1.查看mysql連接數
SHOW FULL PROCESSLIST;
2.查看mysql的配置
show variables like "%innodb%";
3.查看mysql事件是否開啟
show variables like 'event_scheduler';
4.查看mysql鎖的狀態
是否鎖表:
SHOW OPEN TABLES WHERE In_use > 0;
SHOW INNODB STATUS/G;
5.查看mysql data的存放位置
SHOW VARIABLES LIKE '%datadir%'
6.查看mysql 的超時時間設置
show variables like '%timeout%';
四、MySql修改密碼
1,知道原來的myql資料庫的root密碼;
在終端命令行修改
輸入
mysqladmin -u root -p password "新密碼"
回車
Enter password: 【輸入原來的舊密碼】
登錄mysql系統修改
進入mysql
輸入:
mysql -uroot -p 回車 Enter password: 【輸入原來的密碼】
進入之後
輸入:
use mysql;
update user set password=password("新密碼") where user='root';
flush privileges;
然後使用剛纔輸入的新密碼即可登錄。
2,不知道原來的myql的root的密碼;
首先,你必須要有操作系統的root許可權了。要是連繫統的root許可權都沒有的話,先考慮root系統再走下麵的步驟。 類似於安全模式登錄系統。
需要先停止mysql服務
service mysql stop
或
/etc/init.d/mysql stop
註:如果mysql不行,就用mysqld
當提示mysql已停止後進行下一步操作
在終端命令行輸入:
mysqld_safe --skip-grant-tables &
輸入mysql登錄mysql系統
use mysql;
UPDATE user SET password=password("新密碼") WHERE user='root';
flush privileges;
exit;
重新啟動mysql服務
這樣新的root密碼就設置成功了。
五、MySql主從搭建
主從搭建參考:http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label2
說明:搭建MySql的主從時,如複製名稱出現了錯誤,那麼嘗試使用用手動輸入命令。
1,事前準備
信息
操作系統:CentOS6.8
Mysql:5.6
IP:192.169.2.156 (主),192.169.2.98(從)
確保MySql已經成功安裝 !
2,配置更改
更改mysql中的my.cnf文件
添加如下:
主(Master):
#任意自然數n,只要保證兩台MySQL主機不重覆就可以了。
server-id=1
#開啟二進位日誌
log-bin=mysql-bin
#步進值auto_imcrement。一般有n台主MySQL就填n
auto_increment_increment=2
#起始值。一般填第n台主MySQL。此時為第一臺主MySQL
auto_increment_offset=1
#忽略指定的資料庫
binlog-ignore=mysql
binlog-ignore=information_schema
#要同步的資料庫(多個可以使用逗號隔開),預設所有庫
replicate-do-db=DBTEST
從(Slave):
server-id=2
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
replicate-do-db=DBTEST
更改完配置之後重啟!
3,主從配置
主(Master)
master新建slave用戶
進入MySql之後輸入:
grant replication slave on *.* to 'slave_account'@'192.169.2.98' identified by '123456';
說明: 設置一個slave_account用戶擁有REPLICATION SLAVE許可權,可以訪問的ip為192.169.2.98,並設置密碼為123456。
如果想某個網段的伺服器都能登錄,可以使用192.168.2.% 。表示192.168.2.0-192.168.2.255的Server都可以用slave_account用戶登陸主伺服器。
如果想所有的伺服器都能登錄,那麼可以設置為 % 。
然後輸入:
flush privileges;
查看信息,並記錄下文件名稱和分區ID
SHOW MASTER STATUS;
從(Slave):
獲取master的授權信息之後,輸入slave的授權命令:
change master to master_host='192.169.2.156',master_user='slave_account',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=427;
確保成功執行!
4,主從測試
從(Slave):
開始主從複製:
輸入:
START SLAVE;
查看主從複製是否配置成功:
SHOW SLAVE STATUS\G
說明:當看到Slave_IO_Running: YES、Slave_SQL_Running: YES 說明成功,否則失敗。
主(Master)
首先創建一個DBTEST資料庫,然後創建test表,並插入兩條數據。
這裡為了看起來更加明朗,我是用的是SQLYog 工具進行操作的。
進入mysql執行如下腳本:
CREATE DATABASE`DBTEST`;
USE `DBTEST`;
CREATE TABLE `test` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(16) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
insert into `test`(`id`,`name`) values (1,'張三'),(2,'李四');
查看
輸入:
select * from test;
從(Slave):
查看
輸入:
select * from test;
從資料庫並沒有執行腳本,但是信息一致,說明成功同步了。
繼續測試,在主(master)刪除一條數據,查看從的數據。
主(Master)
從(Slave):
可以看到已經完全同步了!
那麼本篇教程就到此結束了,謝謝閱讀!