linux运维、架构之路-MySQL(一)
一、數據庫管理系統
1、RDBMS關系型數據庫特點
①二維表
②典型產品Oracle傳統企業,MySQL是互聯網企業產品
③數據存取通過SQL
④最大的特點,數據安全性很強(ACID)
2、NoSQL非關系型數據庫特點
①不是否定關系型數據庫,做關系型數據庫的補充
②典型產品:Redis持久化緩存、MongoDB、Memcached
③管理不適用SQL管理,而是用一些特殊的API或者數據接口
二、MySQL安裝方式
1、Yum安裝方便、安裝速度快,無法定制
2、二進制:不方便安裝,解壓即可使用,無法定制
3、編譯安裝:可定制,安裝慢
5.5之前:./configure make && make install
5.5之后:cmake gmake
4、定制RPM包,先編譯然后制作rpm再制作yum倉庫,然后yum安裝
? ? ? ?安裝簡單、速度快,可定制,定制時間長,比較復制,大型企業都會選擇定制RPM
三、實戰編譯安裝MySQL-5.6.36
1、環境
[root@db mysql-5.6.36]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@db mysql-5.6.36]# uname -r 2.6.32-696.el6.x86_64 [root@db mysql-5.6.36]# /etc/init.d/iptables status iptables: Firewall is not running. [root@db mysql-5.6.36]# getenforce Disabled [root@db mysql-5.6.36]# hostname -I 172.19.5.54 172.16.1.542、安裝
安裝依賴包創建用戶?
yum install -y ncurses-devel libaio-devel cmake useradd -s /sbin/nologin -M mysql mkdir /server/tools/ -p cd /server/tools/ wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36.tar.gz tar xf mysql-5.6.36.tar.gz cd mysql-5.6.36 cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.36 \ -DMYSQL_DATADIR=/application/mysql-5.6.36/data \ -DMYSQL_UNIX_ADDR=/application/mysql-5.6.36/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \ -DWITH_ZLIB=bundled \ -DWITH_SSL=bundled \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DENABLE_DOWNLOADS=1 \ -DWITH_DEBUG=0 make && make install ln -s /application/mysql-5.6.36/ /application/mysql \cp /server/tools/mysql-5.6.36/support-files/my*.cnf /etc/my.cnf /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql cp /server/tools/mysql-5.6.36/support-files/mysql.server /etc/init.d/mysqld chmod 700 /etc/init.d/mysqld chkconfig mysqld on chkconfig --list mysqld mkdir /application/mysql/tmp chown -R mysql.mysql /application/mysql/ echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile source /etc/profile /etc/init.d/mysqld startCmake的作用
①定制軟件的安裝路徑 ②定制mysql的源程序和命令腳本bin/mysqld(二進制的)關鍵守護程序源碼bin/mysqlbin/mysqld_safescripts/mysql.serverbin/mysqldumpbin/mysqladminsupports-file/mysql_install_db5.7版本開始,需要安裝Boost庫
-DWITH_BOOST=/server/tools/boost_1_59_0 \ 也可以直接cmake指定參數 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory> 系統會下載 boost3、清理數據庫及不需要的用戶
drop database test; drop user 'root'@'::1'; drop user 'root'@'db'; drop user ''@'db'; drop user ''@'localhost'; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.00 sec) mysql> select user,host from mysql.user; +------+-----------+ | user | host | +------+-----------+ | root | 127.0.0.1 | | root | localhost | +------+-----------+ 2 rows in set (0.00 sec)4、安裝遇到的報錯
問題1:
ERROR! The server quit without updating PID file (/application/mysql-5.6.36/data/db.pid).?解決:
chown -R mysql.mysql /application/mysql-5.6.36/問題2:
數據庫啟動會提示,找不到/application/tmp/mysql.sock,原因是5.6.36版本不會自動創建tmp目錄解決:
其它常見問題
①權限.chown -R mysql.mysql②killall mysqld③重新初始化數據.④運行1年了,出問題(非法(斷電)關機或者非法關數據庫,例如kill -9)四、MySQL基礎命令使用
| 命令 | 說明 |
| show databases; | 查詢顯示所有的數據庫信息 |
| create database oldboy; | 創建新的數據庫 |
| drop database oldboy; | 刪除存在的數據庫 |
| use mysql; | 表示選擇使用一個數據庫,相當于cd進入一個數據庫 |
| show tables; | 查看數據庫中表信息 |
| select database(); | 表示查看當前所在數據庫,類似于pwd命令的功能 |
| select user(); | 查看當前登錄數據庫的用戶,類似于whoami命令 |
| select * from user\G; | 查看user表中所有信息,并且縱行顯示 |
| select user,host from user; | 查看user表中指定信息,并且橫行顯示 |
| select user,host from mysql.user; | 查看可以登錄mysql數據庫的目錄,以及都可以從哪里進行管理mysql數據庫 |
| drop user 'user'@'host'; | 刪除用戶 |
| flush privileges; | 刷新權限 |
| grant all on .* to user@'host' identified by 'oldboy123'; | 創建用戶 |
| grant all on .* to Old_Boy@'localhost' identified by 'oldboy123'; | 創建用戶(用戶名包含大寫字母) |
| mysqladmin -u root password '123456'; | 為用戶設置密碼 |
| mysqladmin -uroot -p123456 password 654321 | 修改密碼,在知道舊密碼的前提下 |
| delete from mysql.user where user="root" and host="Mysql"; | 遇主機名大寫,特殊字符使用drop無法刪除 |
?五、MySQL多實例配置
1、環境
[root@db ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@db ~]# uname -r 2.6.32-696.el6.x86_64 [root@db ~]# /etc/init.d/iptables status iptables: Firewall is not running. [root@db ~]# getenforce Disabled [root@db ~]# hostname -I 172.19.5.54 172.16.1.542、配置多實例
①創建多實例目錄授權
mkdir /data/{3306,3307}/data -p chown -R mysql.mysql /data/②上傳多實例配置文件到/下并解壓
cd / #上傳打包好的多實例配置文件、數據、啟動命令 unzip data.zip [root@db /]# tree /data /data ├── 3306 │?? ├── my.cnf │?? └── mysql └── 3307├── my.cnf└── mysql2 directories, 4 files③初始化多實例數據庫
cd /application/mysql/scripts/ ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data/ --user=mysql #初始化數據庫3306 ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data/ --user=mysql #初始化數據庫3307④授權并啟動多實例數據庫
#5.6.36特殊性:需要創建錯誤日志文件 touch /data/3306/oldboy_3306.err touch /data/3307/oldboy_3307.err chown -R mysql.mysql /data chmod +x /data/3306/mysql chmod +x /data/3307/mysql /data/3306/mysql start /data/3307/mysql start配置MySQL命令啟動環境變量
方法一: ln -s /application/mysql/bin/* /usr/local/sbin/ 方法二: echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile source /etc/profile⑤MySQL多實例設置密碼及登錄
#設置密碼: mysqladmin -uroot password 123456 -S /data/3306/mysql.sock mysqladmin -uroot password 123456 -S /data/3307/mysql.sock #登錄數據庫,指定sock mysql -uroot -p123456 -S /data/3306/mysql.sock mysql -uroot -p123456 -S /data/3307/mysql.sock查看多實例端口
[root@db ~]# netstat -lntup|grep 330 tcp 0 0 :::3306 :::* LISTEN 17958/mysqld tcp 0 0 :::3307 :::* LISTEN 18166/mysqld⑥快速搭建3308實例
mkdir -p /data/3308/data \cp /data/3306/my.cnf /data/3308/ \cp /data/3306/mysql /data/3308/ sed -i 's/3306/3308/g' /data/3308/my.cnf sed -i 's/server-id = 6/server-id = 8/g' /data/3308/my.cnf sed -i 's/3306/3308/g' /data/3308/mysql chown -R mysql:mysql /data/3308 chmod 700 /data/3308/mysql cd /application/mysql/scripts ./mysql_install_db --defaults-file=/data/3308/my.cnf --datadir=/data/3308/data --basedir=/application/mysql --user=mysql chown -R mysql:mysql /data/3308 egrep "server-id|log-bin" /data/3308/my.cnf touch /data/3308/oldboy_3308.err /data/3308/mysql start sleep 5 netstat -lnt|grep 33083、MySQL密碼找回
①停止MySQL服務
/etc/init.d/mysqld stop②加參數啟動
mysqld_safe --skip-grant-table --user=mysql &③登錄修改密碼
set password=password('123456'); flush privileges; mysql> mysql mysql> update mysql.user set password=PASSWORD('123456') where user='root' and host='localhost';注:5.7中PASSWORD字段變成了authentication_string
④刷新權限重新MySQL
mysql> flush privileges; /etc/init.d/mysqld restart⑤重新登錄測試
mysql -uroot -p123456⑥多實例MySQL密碼找回
#停庫# mysqld_safe --defaults-file=/data/3306/my.cnf --skip-grant-tables & mysqladmin -uroot -p123456 -S /data/3306/mysql.sock shutdown六、MySQL管理實戰
1、MySQL連接管理
①TPC/IP的方式
mysql -uroot -p123456 -h 10.0.0.54②套接字文件的方式
mysql -uroot -p123456 -S /data/3306/mysql.sock2、MySQLD服務器程序構成
3、MySQL用戶權限
①查看用戶
select user,host from mysql.user;②創建用戶
CREATE USER '用戶'@'主機' IDENTIFIED BY '密碼'; create user 'oldboy'@'locahost' identified by 'oldboy123'; #只能連接③工作中常用授權網段方式
方法1:172.16.1.% #%為通配符,匹配所有內容 方法2:172.16.1.0/255.255.255.0 #是不能使用172.16.1.0/24④查看用戶對應的權限
show grants for oldboy@localhost\G⑤刪除用戶
drop user 'user'@'主機域' 遇主機名大寫特殊的刪除方法: delete from mysql.user where user='bbs' and host='172.16.1.%'; flush privileges;⑥創建用戶并授權
grant all on *.* to oldboy@'172.16.1.%' identified by '123456'; flush privileges;⑦權限回收
REVOKE INSERT ON *.* FROM oldboy@localhost;⑧可以授權的用戶權限
INSERT,SELECT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE⑨博客正確授權
grant select,insert,update,delete,create,drop on blog.* to 'blog'@'172.16.1.%' identified by '123456'; revoke create,drop on blog.* from 'blog'@'172.16.1.%';3、MySQL初始化配置文件
4、MySQL的關閉
?①使用MySQL自帶的管理腳本
/etc/init.d/mysqld stop②使用mysqladmin管理
mysqladmin -uroot -123456 shutdown #必須知道數據庫密碼③利用系統進程管理命令關閉MySQL(不建議使用)
kill pid #<==這里的pid為數據庫服務對應的進程號。 killall mysqld #<==這里的mysqld是數據庫服務對應的進程名字。 pkill mysqld #<==這里的mysqld是數據庫服務對應的進程名字企業高并發場景野蠻粗魯殺死mysql導致數據庫故障
http://oldboy.blog.51cto.com/2561410/1431161 http://oldboy.blog.51cto.com/2561410/1431172轉載于:https://www.cnblogs.com/yanxinjiang/p/8108624.html
總結
以上是生活随笔為你收集整理的linux运维、架构之路-MySQL(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】mysql,mysqli,PDO三
- 下一篇: 个人博客01