<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="https://publishpress.com/"
	>

<channel>
	<title>Anh Le, Author at Tomoshare</title>
	<atom:link href="https://blog.tomosia.com.vn/author/anhle/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.tomosia.com.vn/author/anhle/</link>
	<description>Kênh chia sẻ kiến thức Tomosia Việt Nam</description>
	<lastBuildDate>Fri, 08 Dec 2023 10:09:53 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.tomosia.com.vn/wp-content/uploads/2023/09/cropped-icon-32x32.png</url>
	<title>Anh Le, Author at Tomoshare</title>
	<link>https://blog.tomosia.com.vn/author/anhle/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Ước tính RAM / CPU cần sử dụng cho một website</title>
		<link>https://blog.tomosia.com.vn/uoc-tinh-ram-cpu-can-su-dung-cho-mot-website/</link>
					<comments>https://blog.tomosia.com.vn/uoc-tinh-ram-cpu-can-su-dung-cho-mot-website/#comments</comments>
		
		<dc:creator><![CDATA[Anh Le]]></dc:creator>
		<pubDate>Fri, 08 Dec 2023 10:08:27 +0000</pubDate>
				<category><![CDATA[Chưa phân loại]]></category>
		<category><![CDATA[Kinh nghiệm]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=2333</guid>

					<description><![CDATA[<p>Ước lượng tài nguyên (RAM và CPU) cần thiết cho một website là một quá trình phức tạp&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/uoc-tinh-ram-cpu-can-su-dung-cho-mot-website/">Ước tính RAM / CPU cần sử dụng cho một website</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Ước lượng tài nguyên (RAM và CPU) cần thiết cho một website là một quá trình phức tạp và phụ thuộc vào nhiều yếu tố khác nhau. Dưới đây là một số bước và yếu tố mà bạn có thể xem xét khi ước lượng tài nguyên:</p>



<ul class="wp-block-list">
<li><strong>Lượng Truy Cập (Traffic)</strong>: Ước lượng số lượt truy cập trang web hàng ngày, hàng giờ, hoặc trong khoảng thời gian nào đó.</li>



<li><strong>Loại Website</strong>: Loại website của bạn ảnh hưởng đến lượng tài nguyên cần thiết. Ví dụ, một trang web dạng blog có thể yêu cầu ít tài nguyên hơn so với một trang web thương mại điện tử phức tạp.</li>



<li><strong>Nội Dung Động</strong>: Nếu trang web của bạn chứa nhiều nội dung động, ví dụ như video, hình ảnh động, hay tính năng tương tác cao, sẽ đòi hỏi nhiều tài nguyên hơn so với trang web tĩnh.</li>



<li><strong>Cơ Sở Dữ Liệu</strong>: Kích thước cơ sở dữ liệu và số lượng truy vấn đối với cơ sở dữ liệu cũng quan trọng. Một trang web sử dụng cơ sở dữ liệu lớn và phức tạp sẽ đòi hỏi nhiều tài nguyên hơn.</li>



<li><strong>Cache và Tối Ưu Hóa</strong>: Sử dụng kỹ thuật tối ưu hóa và cache có thể giảm áp lực lên tài nguyên server.</li>



<li><strong>Dịch Vụ Bên Ngoài</strong>: Nếu bạn sử dụng các dịch vụ bên ngoài như CDN (Content Delivery Network) hoặc các dịch vụ quản lý nội dung, có thể giảm áp lực lên server của bạn.</li>



<li><strong>Đánh Giá Hiệu Năng Hệ Thống</strong>: Đánh giá hiệu năng của server hiện tại để xem xét việc nâng cấp.</li>



<li><strong>Dự Đoán Mở Rộng</strong>:Nếu bạn dự định mở rộng website trong tương lai, hãy xem xét các yếu tố mở rộng và dự đoán nhu cầu tài nguyên tương lai.</li>



<li><strong>Thử Nghiệm và Đo Lường</strong>: Thử nghiệm tải và đo lường hiệu suất có thể cung cấp thông tin quan trọng về cách website của bạn phản ứng dưới áp lực.</li>



<li><strong>Chính Sách và Yêu Cầu Kỹ Thuật</strong>: Xác định các chính sách và yêu cầu kỹ thuật cụ thể của bạn, chẳng hạn như thời gian phản hồi tối đa.</li>



<li>&#8230;</li>
</ul>



<h5 id="vay-cau-hinh-phan-cung-bao-nhieu-la-phu-hop" class="wp-block-heading">Vậy cấu hình phần cứng bao nhiêu là phù hợp?</h5>



<p>Trước tiên cần xác định số lượng người truy cập trong một ngày cũng như số lượng người online đồng thời trung bình. Bạn có thể sử dụng Google Analytics để thống kê và phân tích dữ liệu người dùng khi truy cập website của bạn.<br>Đối với các loại website load nhẹ chỉ có bài viết, tin tức, hình ảnh vừa phải và có traffic dưới 2000 visit mỗi ngày hoặc website load nặng nhiều bài viết, hình ảnh và có traffic dưới 1000 visit mỗi ngày thì bạn có thể cấu hình tầm 512MB RAM và 1core CPU.<br>Dưới đây là bảng cấu hình tham khảo dành cho bạn dựa theo lượt truy cập.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:100%">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:100%">
<figure class="wp-block-table is-style-stripes"><table><tbody><tr><td>Visits/Day</td><td>RAM</td><td>CPU</td></tr><tr><td>1000 &#8211; 3000</td><td>1 GB</td><td>1 core</td></tr><tr><td>3000-6000</td><td>1-2 GB</td><td>1-2 core</td></tr><tr><td>6000-8000</td><td>2-4 GB</td><td>1-2 core</td></tr><tr><td>&gt;8000</td><td>&gt; 4 GB</td><td>&gt;= 1 core<br></td></tr></tbody></table></figure>
</div>
</div>
</div>
</div>



<p>Nên chọn CPU có nhiều nhân (core) cho máy chủ. Số lượng nhân CPU càng nhiều thì nó sẽ càng có lợi cho người sử dụng. CPU nhanh hơn thì máy chủ nhanh hơn, nó giúp cho quá trình sử lý dữ liệu diễn ra nhanh gấp nhiều lần. Hãy luôn ưu tiên CPU nhiều nhân, một CPU có ít nhân nhưng có xung nhịp cao sẽ không tốt bằng một CPU có nhiều nhân với xung nhịp thấp hơn.<br>Đầu tư tối đa RAM cho cấu hình máy chủ. Cấu hình server với bộ nhớ RAM cao giúp sử lý được nhiều dữ liệu cùng một lúc, tránh tình trạng máy tính bị đơ hay treo máy.</p>



<p>Đối với những website phát triển nhanh, số lượng dữ liệu lưu trữ ngày càng nhiều dẫn đến database ngày càng tăng. Bạn cần thường xuyên theo dõi mức độ sử dụng tài nguyên RAM, và có kế hoạch nâng cấp khi lượng RAM gần hết vì database càng lớn thì nhu cầu sử dụng RAM càng nhiều.</p>



<h5 id="tong-ket" class="wp-block-heading">Tổng kết</h5>



<p>Một máy chủ có thể có cấu hình tối ưu với khoảng 4-8 GB RAM và 2-4 CPU core cho một website với lượng truy cập trung bình. Tuy nhiên, điều này chỉ là một ước lượng tổng quát và bạn nên thử nghiệm trên môi trường thực tế, và dự theo sự thay đổi của các yếu tố mình đã chia sẽ ở trên mà cập nhật lại để đảm bảo website đáp ứng đúng với yêu cầu cụ thể của bạn.</p>



<p>Cảm ơn các bạn đã đọc bài viết của mình, chúc mọi người có thêm nhiều kiến thức hay để phục vụ cho dự án!</p>
<p>The post <a href="https://blog.tomosia.com.vn/uoc-tinh-ram-cpu-can-su-dung-cho-mot-website/">Ước tính RAM / CPU cần sử dụng cho một website</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/uoc-tinh-ram-cpu-can-su-dung-cho-mot-website/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Cài đặt MySQL trên Amazon Linux</title>
		<link>https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/</link>
					<comments>https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/#comments</comments>
		
		<dc:creator><![CDATA[Anh Le]]></dc:creator>
		<pubDate>Wed, 15 Nov 2023 18:46:52 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[MySQL]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1901</guid>

					<description><![CDATA[<p>Giới thiệu Đối với các website không yêu cầu nhiều về quản lý CSDL như blog, các dự&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/">Cài đặt MySQL trên Amazon Linux</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h5 id="gioi-thieu" class="wp-block-heading">Giới thiệu</h5>



<p>Đối với các website không yêu cầu nhiều về quản lý CSDL như blog, các dự án cần build môi trường Dev, Staging,&#8230; thì bạn có thể giản thiểu chi phí cho việc quản lý CSDL bằng cách cài đặt trực tiếp MySQL lên EC2.</p>



<h5 id="cac-buoc-thuc-hien" class="wp-block-heading">Các bước thực hiện</h5>



<p>Step1: Thêm Mysql repository.</p>



<p>Trước tiên, chúng ta cần thêm kho lưu trữ MySQL Yum vào danh sách kho lưu trữ của máy chủ Amazon Linux 2023. Thao tác này chỉ được thực hiện một lần và cung cấp tất cả các kho phiên bản gói MySQL.</p>



<p>Sử dụng wget để tải về repository bằng command.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="/* For MySQL 5.7 */
sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

/* For MySQL 8 */
sudo wget https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm " style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">/*</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">For</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">5.7</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE; font-style: italic">*</span><span style="color: #E7EE98">/</span></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">wget</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">/*</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">For</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">8</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE; font-style: italic">*</span><span style="color: #E7EE98">/</span></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">wget</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm</span><span style="color: #F6F6F4"> </span></span></code></pre></div>



<p>Nhập y để confirm tải package.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="Dependencies Resolved

======================================================================================================================================================================================================
 Package                                               Arch                               Version                           Repository                                                           Size
======================================================================================================================================================================================================
Installing:
 mysql80-community-release                             noarch                             el7-5                             /mysql80-community-release-el7-5.noarch                             9.1 k

Transaction Summary
======================================================================================================================================================================================================
Install  1 Package

Total size: 9.1 k
Installed size: 9.1 k
Is this ok [y/d/N]: y" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">Dependencies</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Resolved</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">======================================================================================================================================================================================================</span></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #62E884">Package</span><span style="color: #F6F6F4">                                               </span><span style="color: #E7EE98">Arch</span><span style="color: #F6F6F4">                               </span><span style="color: #E7EE98">Version</span><span style="color: #F6F6F4">                           </span><span style="color: #E7EE98">Repository</span><span style="color: #F6F6F4">                                                           </span><span style="color: #E7EE98">Size</span></span>
<span class="line"><span style="color: #F6F6F4">======================================================================================================================================================================================================</span></span>
<span class="line"><span style="color: #62E884">Installing:</span></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #62E884">mysql80-community-release</span><span style="color: #F6F6F4">                             </span><span style="color: #E7EE98">noarch</span><span style="color: #F6F6F4">                             </span><span style="color: #E7EE98">el7-5</span><span style="color: #F6F6F4">                             </span><span style="color: #E7EE98">/mysql80-community-release-el7-5.noarch</span><span style="color: #F6F6F4">                             </span><span style="color: #BF9EEE">9.1</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">k</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Transaction</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Summary</span></span>
<span class="line"><span style="color: #F6F6F4">======================================================================================================================================================================================================</span></span>
<span class="line"><span style="color: #62E884">Install</span><span style="color: #F6F6F4">  </span><span style="color: #BF9EEE">1</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Package</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Total</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">size:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">9.1</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">k</span></span>
<span class="line"><span style="color: #62E884">Installed</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">size:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">9.1</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">k</span></span>
<span class="line"><span style="color: #62E884">Is</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">this</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ok</span><span style="color: #F6F6F4"> [y/d/N]: y</span></span></code></pre></div>



<p>Kiểm tra repository đã tải thành công chưa với câu lệnh.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo ls -lrt" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ls</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-lrt</span></span></code></pre></div>



<p>Output:</p>



<p><em>[ec2-user@ip-172-31-32-xxx ~]$ sudo ls -lrt<br>total 12<br>-rw-r&#8211;r&#8211;. 1 root root 10534 Jul 25 2022 mysql80-community-release-el9-1.noarch.rpm</em></p>



<p>Step 2: Cài đặt MySQL.</p>



<p>For MySQL 5.7</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="/* For MySQL 5.7 */
sudo yum localinstall mysql57-community-release-el7-11.noarch.rpm" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">/*</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">For</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">5.7</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE; font-style: italic">*</span><span style="color: #E7EE98">/</span></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">yum</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localinstall</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql57-community-release-el7-11.noarch.rpm</span></span></code></pre></div>



<p>Ở bước này nếu bạn gặp lỗi tương tự như bên dưới thì tiếp tục chạy 2 lệnh tiếp theo để fix nhé.</p>



<p><strong>Failing package is: mysql-community-client-5.7.39-1.el7.x86_64<br>GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

sudo yum -y install mysql-community-server" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">rpm</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--import</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">https://repo.mysql.com/RPM-GPG-KEY-mysql-2022</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">yum</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">install</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql-community-server</span></span></code></pre></div>



<p>For MySQL 8.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo dnf install mysql80-community-release-el9-1.noarch.rpm
dnf repolist enabled | grep &quot;mysql.*-community.*&quot;
sudo dnf install mysql-community-server" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">dnf</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">install</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql80-community-release-el9-1.noarch.rpm</span></span>
<span class="line"><span style="color: #62E884">dnf</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">repolist</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">enabled</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">|</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">grep</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">mysql.*-community.*</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">dnf</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">install</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql-community-server</span></span></code></pre></div>



<p>Step 3: Sau khi hoàn tất các câu lệnh cài đặt, ta thực hiện start MySQL.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo systemctl start mysqld.service" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">systemctl</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">start</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysqld.service</span></span></code></pre></div>



<p>Step 4: Kiểm tra trạng thái của Mysql hiện tại.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo systemctl status mysqld.service" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">systemctl</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">status</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysqld.service</span></span></code></pre></div>



<p>Nếu thành công bạn sẽ thấy thông báo MySQL đã running <em>Active: active (running)</em> như bên dưới.</p>



<p>Dec 01 19:02:20 centos-512mb-sfo2-02 systemd[1]: Started MySQL Server.</p>



<h5 id="thiet-lap-cau-hinh-cho-mysql" class="wp-block-heading">Thiết lập cấu hình cho Mysql</h5>



<p>Đổi mật khẩu cho người dùng root<br>Như bạn đã biết, từ Mysql 8.0 thì việc sử dụng đăng nhập không dùng mật khẩu với người dùng root đã bị loại bỏ. Vậy để tìm mật khẩu cho người dùng root khi đăng nhập lần đầu ta sẽ tìm trong file log của mysql. Mật khẩu tạm thời được tìm thấy khi thực hiện câu lệnh:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo grep 'temporary password' /var/log/mysqld.log" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">grep</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">temporary password</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/var/log/mysqld.log</span></span></code></pre></div>



[ec2-user@ip-172-31-32-xxx ~]$ sudo grep &#8216;temporary password&#8217; /var/log/mysqld.log<br>2023-07-28T09:06:43.641665Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: D6%=yjkDGnp8</p>



<p>Tiếp theo ta thực hiện đăng nhập vào MySQL và nhập password tạm thời của người dùng root trong câu lệnh bên dưới: (Mật khẩu root: D6%=yjkDGnp8)</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo mysql_secure_installation -p" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql_secure_installation</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-p</span></span></code></pre></div>



<p>Nhập mật khẩu mới cho người dùng root và nhập y cuối mỗi câu để loại bỏ các user test.</p>



<p>Lưu ý khi đặt mật khẩu cần tuân theo quy tắt sau:<br>+ Chứa ít nhất 1 ký tự in hoa<br>+ Chứa ít nhất 1 ký tự thường<br>+ Chứa ít nhất 1 số<br>+ Chứa ít nhất 1 ký tự đặc biệt<br>+ Tổng số ký tự phải lớn hơn 8</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="Securing the MySQL server deployment.


The existing password for the user account root has expired. Please set a new password.

New password: &lt;MẬT KHẨU MỚI&gt;

Re-enter new password: &lt;NHẬP LẠI MẬT KHẨU&gt;
The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) :

 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">Securing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">server</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">deployment.</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">The</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">existing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">user</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">account</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">has</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">expired.</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Please</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">set</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">new</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">New</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&lt;</span><span style="color: #E7EE98">MẬT</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">KHẨU</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MỚ</span><span style="color: #F6F6F4">I</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Re-enter</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">new</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&lt;</span><span style="color: #E7EE98">NHẬP</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">LẠI</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MẬT</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">KHẨ</span><span style="color: #F6F6F4">U</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #62E884">The</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">validate_password</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">component</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">is</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">installed</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">on</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">server.</span></span>
<span class="line"><span style="color: #62E884">The</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">subsequent</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">steps</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">will</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">run</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">with</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">existing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">configuration</span></span>
<span class="line"><span style="color: #62E884">of</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">component.</span></span>
<span class="line"><span style="color: #62E884">Using</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">existing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Estimated</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">strength</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">of</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">100</span></span>
<span class="line"><span style="color: #62E884">Change</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">?</span><span style="color: #F6F6F4"> ((Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #97E1F1">...</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">skipping.</span></span>
<span class="line"><span style="color: #62E884">By</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">default,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">installation</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">has</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">an</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">anonymous</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">user,</span></span>
<span class="line"><span style="color: #62E884">allowing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">anyone</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">log</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">into</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">without</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">having</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">have</span></span>
<span class="line"><span style="color: #62E884">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">user</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">account</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">created</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">them.</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">This</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">is</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">intended</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">only</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span></span>
<span class="line"><span style="color: #62E884">testing,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">and</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">make</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">installation</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">go</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">bit</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">smoother.</span></span>
<span class="line"><span style="color: #62E884">You</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">should</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">remove</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">them</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">before</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">moving</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">into</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">production</span></span>
<span class="line"><span style="color: #62E884">environment.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Remove</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">anonymous</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">users?</span><span style="color: #F6F6F4"> (Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> y</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Normally,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">should</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">only</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">be</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">allowed</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">connect</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">from</span></span>
<span class="line"><span style="color: #62E884">&#39;localhost&#39;</span><span style="color: #97E1F1">.</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">This</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ensures</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">that</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">someone</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">cannot</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">guess</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">at</span></span>
<span class="line"><span style="color: #62E884">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">from</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">network.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Disallow</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">login</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">remotely?</span><span style="color: #F6F6F4"> (Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> y</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">By</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">default,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">comes</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">with</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">named</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">test</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">that</span></span>
<span class="line"><span style="color: #62E884">anyone</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">can</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">access.</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">This</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">is</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">also</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">intended</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">only</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">testing,</span></span>
<span class="line"><span style="color: #62E884">and</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">should</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">be</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">removed</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">before</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">moving</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">into</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">production</span></span>
<span class="line"><span style="color: #62E884">environment.</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Remove</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">and</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">access</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">it?</span><span style="color: #F6F6F4"> (Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> y</span></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #62E884">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Dropping</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database...</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #62E884">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Removing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">privileges</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">on</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database...</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Reloading</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">privilege</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">tables</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">will</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ensure</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">that</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">all</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">changes</span></span>
<span class="line"><span style="color: #62E884">made</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">so</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">far</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">will</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">take</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">effect</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">immediately.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Reload</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">privilege</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">tables</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">now?</span><span style="color: #F6F6F4"> (Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> y</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">All</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">done!</span></span></code></pre></div>



<p>Sau khi hoàn tất bước đổi mật khẩu ở trên, chúng ta có thể thực hiện đăng nhập lại với mật khẩu vừa đổi.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="mysql -uroot -pPass_xxxxx" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">mysql</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-uroot</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-pPass_xxxxx</span></span></code></pre></div>



<h5 id="tao-db-va-nguoi-dung-cho-db-cua-ung-dung-web" class="wp-block-heading">Tạo DB và người dùng cho DB của ứng dụng web</h5>



<p>Để tạo một database mới.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="create database db_new;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">create</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_new</span><span style="color: #F6F6F4">;</span></span></code></pre></div>



<p>Bước tiếp theo chúng ta sẽ thực hiện tạo một user cho ứng dụng web.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="CREATE USER 'user_db'@'localhost' IDENTIFIED BY 'Pass_xxxxx';" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">CREATE</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">USER</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">user_db</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">@</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">localhost</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">IDENTIFIED</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">BY</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">Pass_xxxxx</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">;</span></span></code></pre></div>



<p>Thêm full quyền quản lý DB cho user vừa tạo ở trên</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="GRANT ALL PRIVILEGES ON db_new.* TO 'user_db'@'localhost';
FLUSH PRIVILEGES;
exit;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">GRANT</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ALL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">PRIVILEGES</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ON</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_new.</span><span style="color: #BF9EEE; font-style: italic">*</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">TO</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">user_db</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">@</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">localhost</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #62E884">FLUSH</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">PRIVILEGES</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #97E1F1">exit</span><span style="color: #F6F6F4">;</span></span></code></pre></div>



<p>Để kiểm tra bước tạo ở trên đã chuẩn chưa thì chúng ta thực hiện đăng nhập lại với user và password vừa tạo:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="mysql -uuser_db -ppass_xxxx" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">mysql</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-uuser_db</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-ppass_xxxx</span></span></code></pre></div>



<p>Kiểm tra trạng thái của MySQL.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="Redirecting to /bin/systemctl status mysqld.service
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: d&gt;
Active: active (running) since Mon 2023-07-31 10:10:56 UTC; 2 weeks 2 days&gt;
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Main PID: 250921 (mysqld)
Status: &quot;Server is operational&quot;
Tasks: 46 (limit: 2322)
Memory: 575.6M
CPU: 2h 19min 306ms
CGroup: /system.slice/mysqld.service
└─250921 /usr/sbin/mysqld" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">Redirecting</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/bin/systemctl</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">status</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysqld.service</span></span>
<span class="line"><span style="color: #62E884">●</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysqld.service</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Server</span></span>
<span class="line"><span style="color: #62E884">Loaded:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">loaded</span><span style="color: #F6F6F4"> (/usr/lib/systemd/system/mysqld.service; </span><span style="color: #62E884">enabled</span><span style="color: #F6F6F4">; </span><span style="color: #62E884">preset:</span><span style="color: #F6F6F4"> d</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #62E884">Active:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">active</span><span style="color: #F6F6F4"> (running) since Mon 2023-07-31 10:10:56 UTC; </span><span style="color: #62E884">2</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">weeks</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">2</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">day</span><span style="color: #F6F6F4">s</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #62E884">Docs:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">man:mysqld</span><span style="color: #F6F6F4">(</span><span style="color: #62E884">8</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #62E884">http://dev.mysql.com/doc/refman/en/using-systemd.html</span></span>
<span class="line"><span style="color: #62E884">Main</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">PID:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">250921</span><span style="color: #F6F6F4"> (mysqld)</span></span>
<span class="line"><span style="color: #62E884">Status:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">Server is operational</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #62E884">Tasks:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">46</span><span style="color: #F6F6F4"> (limit: </span><span style="color: #BF9EEE">2322</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #62E884">Memory:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">575.6</span><span style="color: #E7EE98">M</span></span>
<span class="line"><span style="color: #62E884">CPU:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">2</span><span style="color: #E7EE98">h</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">19</span><span style="color: #E7EE98">min</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">306</span><span style="color: #E7EE98">ms</span></span>
<span class="line"><span style="color: #62E884">CGroup:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/system.slice/mysqld.service</span></span>
<span class="line"><span style="color: #62E884">└─250921</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/usr/sbin/mysqld</span></span></code></pre></div>



<p>Đến bước này là chúng ta đã hoàn thành việc cài đặt Mysql server trên Amazon Linux 2023. Ngoài ra để thực hiện import sql có sẵn vào DB vừa tạo thì chúng ta có thể cài đặt PhpMyadmin hoặc sử dụng command import của mysql.</p>



<h5 id="import-va-export-mysql" class="wp-block-heading">Import và Export Mysql</h5>



<p>Để Export Mysql, ở đây ta sẽ sử dụng mysqldump, thực hiện câu lệnh sau tại terminal local:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="mysqldump -u user_db -pPass_xxxxx db_export &gt; ./db_backup.sql" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">mysqldump</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-u</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">user_db</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-pPass_xxxxx</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_export</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">./db_backup.sql</span></span></code></pre></div>



<p>Lưu ý để sử dụng được DB và import vào DB mới bạn cần xóa warning của mysqldump trong file db_backup.sql vừa export ra. Tìm dòng sau trong file và xóa:</p>



<p><em>mysqldump: [Warning] Using a password on the command line interface can be insecure.</em></p>



<p>Để Import Mysql vào db mới ta thực hiện lệnh:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="mysql -u username -p db_export &lt; db_backup.sql" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">mysql</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-u</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">username</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-p</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_export</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_backup.sql</span></span></code></pre></div>



<h5 id="tong-ket" class="wp-block-heading">Tổng kết</h5>



<p>Trên đây là toàn bộ quá trình cài đặt Mysql trên Amazon Linux 2023. Các bước hướng dẫn trên được tóm gọn dành cho người có kinh nghiệm khi cài đặt server. Nếu bạn có vấn đề gì trong quá trình cài đặt hãy để lại comment hoặc inbox mình sẽ hướng dẫn cho nhé.</p>



<p>Reference:</p>



<p><a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2023.html">https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2023.html</a></p>
<p>The post <a href="https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/">Cài đặt MySQL trên Amazon Linux</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Tối ưu cách viết CSS</title>
		<link>https://blog.tomosia.com.vn/toi-uu-cach-viet-css/</link>
					<comments>https://blog.tomosia.com.vn/toi-uu-cach-viet-css/#comments</comments>
		
		<dc:creator><![CDATA[Anh Le]]></dc:creator>
		<pubDate>Thu, 12 Oct 2023 01:53:39 +0000</pubDate>
				<category><![CDATA[Html/CSS]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1177</guid>

					<description><![CDATA[<p>CSS có thể làm cho một trang web HTML nhàm chán thành các trang web sinh động, nhưng&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/toi-uu-cach-viet-css/">Tối ưu cách viết CSS</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>CSS có thể làm cho một trang web HTML nhàm chán thành các trang web sinh động, nhưng việc sử dụng CSS không đúng cách cũng có thể khiến trang web của bạn gặp vấn đề ngay trước cả khi trang web của bạn được render. Ngoài tối ưu thuật toán, xử lý ở phần controller, model hoặc cơ sở dữ liệu thì CSS cũng cần được tối ưu hóa để giúp trang web chạy nhanh hơn.<br>Chính vì vậy, bài viết này sẽ đưa tới cho bạn các tips để tối ưu hóa CSS một cách hiệu quả.</p>



<h5 id="basic" class="wp-block-heading"><strong>Basic</strong></h5>



<p>CSS không phải nguyên nhân trực tiếp gây ra vấn đề khi load trang web, nhưng bạn vẫn nên tối ưu những phần nặng của dữ liệu mà CSS có thể chứa như: Xử dung CDN, xoá các tệp không xử dụng đến, thay đổi kích thước hình ảnh, xử dụng thumbnail, giảm thiểu số file css nếu có thể,&#8230;</p>



<p>Tuân thủ một số quy tắc trong style coding conventions cũng là một điều nên nhớ, dưới đây là một số quy tắc bạn có thể tham khảo:</p>



<ul class="wp-block-list">
<li>Lùi vào 2 space (khoảng trống) cho mỗi thuộc tính</li>



<li>Sử dụng ngoặc kép thay vì sử dụng ngoặc đơn (font-family: &#8220;Arial Black&#8221;, input[type=&#8221;checkbox&#8221;])</li>



<li>Đặt một dấu cách ở đằng sau dấu :</li>



<li>Đặt một dấu cách ở trước dấu {</li>



<li>Kết thúc định nghĩa các thuộc tính bằng một dấu chấm phẩy (mặc dù việc thêm dấu chấm phẩy là không bắt buộc nhé)</li>



<li>Sử dụng các cú pháp ngắn gọn nếu có thể ví dụ như (padding, margin&#8230;)</li>



<li>Chỉ khai báo mỗi dòng một thuộc tính (dễ nhìn, nếu lỗi có thể biết lỗi được ở dòng nào thuộc tính nào)</li>



<li>Code thêm những thuộc tính khác mà trình duyệt này hỗ trợ mà trình duyệt khác không hỗ trợ</li>



<li>Giữa các khối CSS nên có một khoảng trắng</li>



<li>Khuyến khích sử dụng mã màu (#fff)</li>



<li>&#8230;</li>
</ul>



<h5 id="css-pre-processors" class="wp-block-heading"><strong>CSS Pre-Processors</strong></h5>



<p>CSS Pre-Processors là một ngôn ngữ tiền xử lý CSS, các bạn có thể hiểu nó là một kiểu viết mở rộng, nâng cấp hơn so với CSS. Mục đích của CSS Pre-Processors được sinh ra nhằm mục đích đưa các đoạn code CSS trở nên giống hơn một ngôn ngữ lập trình, và cách viết này sẽ biên dịch lại thành các đoạn code CSS bình thường.</p>



<p>Để áp dụng các CSS Pre-Processors vào dự án của bạn thì có vài công cụ nổi tiếng giúp các bạn áp dụng vào dự án như: SCSS, SASS, LESS, Stylus&#8230; Trong bài này mình sẽ giới thiệu về SCSS/SASS.</p>



<p>Tất nhiên là phải có những lợi ích nhất định của CSS Pre-Processors thì nó mới được áp dụng vào các dự án như:</p>



<ul class="wp-block-list">
<li>Cải thiện thời gian viết CSS</li>



<li>Linh hoạt hơn và có khả năng sử dụng lại code</li>



<li>Dễ dàng bảo trì cũng như là phát triển</li>



<li>Cấu trúc viết code rõ ràng, dễ nhìn hơn rất nhiền</li>



<li>Hạn chế được những đoạn code trùng lặp, file code nhỏ gọn.</li>
</ul>



<h6 id="sass" class="wp-block-heading"><strong>SASS</strong></h6>



<p>SASS là viết tắt của Syntactically Awesome StyleSheets là một CSS Pre-Processors nổi tiếng được biết đến trong giới Front-end Developer. SASS được sinh ra bởi lập trình viên Ruby, nếu như bạn đã làm việc với Ruby thì ắt hẳn sẽ biết tới các template phổ biến như HAML hay SLIM.</p>



<p>Tại sao mà mình lại nhắc đến Ruby, nó liên quan gì đến CSS thì mình xin giải thích đó chính là đến từ cú pháp. Ví dụ như khi viết SLIM các bạn sẽ không cần các dấu đóng thẻ, hay dấu chấm phẩy, hay nhận biết các thẻ con bằng cách lùi dòng vào&#8230; Điều này chính là những kiểu viết của SASS.</p>



<p>Ví dụ như thế này</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code=".nav

  width: 100%

  height: 100%

  float: right

  p

    color: #e1e1e1

    font-size: 14px;" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">.nav</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  width: </span><span style="color: #BD93F9">100</span><span style="color: #FF79C6">%</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  height: </span><span style="color: #BD93F9">100</span><span style="color: #FF79C6">%</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  float: right</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  p</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    color: #e1e1e1</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">size: 14px;</span></span></code></pre></div>



<h6 id="scss" class="wp-block-heading"><strong>SCSS</strong></h6>



<p>Một phần không nhỏ developer không thích cách viết của SASS lắm vì nó mang lại cảm giác đọc hơi rối cả khó hiểu, có lẽ chính vì thế nên đã có sự nâng cấp tuyệt vời đến từ SCSS.</p>



<p>SCSS hay còn gọi là Sassy CSS, có cú pháp giống với CSS hơn là SASS giúp chúng ta tiếp cận dễ hơn rất nhiều. Hiểu đơn giản thì SCSS là một phiên bản nâng cấp của SASS.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code=".nav {

  width: 100%;

  height: 100%;

  float: right;

  p {

    color: #e1e1e1

    font-size: 14px;

  }

}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">.nav {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  width: </span><span style="color: #BD93F9">100</span><span style="color: #FF79C6">%</span><span style="color: #F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  height: </span><span style="color: #BD93F9">100</span><span style="color: #FF79C6">%</span><span style="color: #F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  float: right;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  p {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    color: #e1e1e1</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">size: 14px;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<h6 id="su-khac-biet-co-ban-cua-scss-va-sass" class="wp-block-heading"><strong>Sự khác biệt cơ bản của SCSS và SASS</strong></h6>



<p>Qua 2 phần giới thiệu ở trên thì phần nào các bạn cũng đã hiểu hiểu SCSS và SASS là gì và cách viết như thế nào. Ở phần này mình xin tóm tắt lại chút sự khác biệt để các bạn có cái nhìn tổng quát hơn.</p>



<p>SASS:</p>



<ul class="wp-block-list">
<li>Cú pháp ngắn gọn hơn</li>



<li>Sử dụng indent để thể hiện quy tắc xếp chồng (nested rules)</li>



<li>Khi kết thúc một property thì không cần dấu ; để kết thúc</li>



<li>Khai báo mixins bằng ký tự =</li>



<li>Sử dụng mixins bằng ký tự +</li>
</ul>



<p>SCSS</p>



<ul class="wp-block-list">
<li>Cú pháp gần với CSS hơn</li>



<li>Sử dụng cặp dấu {} để thể hiện quy tắc xếp chồng</li>



<li>Kết thúc 1 khai báo property CSS bằng dấu ;</li>



<li>Khai báo mixins bằng cú pháp @mixins ten-mixins</li>



<li>Sử dụng mixins bằng cú pháp @include ten-mixins</li>
</ul>



<h6 id="su-dung-variables" class="wp-block-heading"><strong>Sử dụng variables</strong></h6>



<p>Bây giờ mình bắt đầu giới thiệu những thứ hay ho để giúp bạn viết CSS chuyên nghiệp hơn, hay ho hơn.</p>



<p>Để bắt đầu thì mình xin giới thiệu về variables. Đến CSS mà còn có cả variables (biến) thì cũng hơi bị thú vị rồi đấy.</p>



<p>Giả sử như dự án của bạn dùng đến cả trăm chỗ có thể sử dụng cùng một giá trị màu chả hạn, đối với các mã màu đơn giản thì các bạn nhớ được thôi chứ ví dụ có những mà màu rắc rối giả sử như DEFQ13 chả hạn, thì nhớ làm sao được, nhà còn bao việc 😄</p>



<p>Để tối ưu hơn trong việc này chúng ta sẽ đặt cái mã màu này trong một biến, giúp chúng ta thuận tiện sử dụng hơn nhiều.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="$text-grey: #e1e1e1;

/* Sử dụng */

p {

  color: $text-grey;

}

div.container a {

  color: $text-grey;

}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">$text</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">grey: #e1e1e1;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4">/* Sử dụng */</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">p {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  color: $text</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">grey;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">div.container a {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  color: $text</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">grey;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<p>&#8230;</p>



<p>Viết đơn giản không phải cầu kì.</p>



<h6 id="mixins" class="wp-block-heading"><strong>Mixins</strong></h6>



<p>Mình từng nói ở trên là CSS Pre-Processors giúp chúng ta có thể tái sử dụng code. Mixins chính là cách để giúp chúng ta có thể làm được việc này một cách đơn giản.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="@mixin bordered {

  border: 1px solid #ddd;
  
  &amp;:hover {
  
  border-color: #999;
  
  }

}

/*Sử dụng chỉ cần include mixins đã khai báo*/

div {

    @include bordered;

}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">@</span><span style="color: #50FA7B; font-style: italic">mixin</span><span style="color: #F8F8F2"> bordered {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  border: 1px solid #ddd;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6">&amp;</span><span style="color: #F8F8F2">:hover {</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">  border</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">color: #</span><span style="color: #BD93F9">999</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">  }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4">/*Sử dụng chỉ cần include mixins đã khai báo*/</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">div {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    @</span><span style="color: #50FA7B; font-style: italic">include</span><span style="color: #F8F8F2"> bordered;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<p>Thậm chí chúng ta có thể truyền cả tham số vào mixins.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="@mixin bordered($width) {

  border: $width solid #ddd;
  
  &amp;:hover {
  
    border-color: #999;
    
  }
  
}

/*Sử dụng chỉ cần include mixins đã khai báo*/

div {
  @include bordered(1px);
}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">@</span><span style="color: #50FA7B; font-style: italic">mixin</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">bordered</span><span style="color: #F8F8F2">($width) {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  border: $width solid #ddd;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6">&amp;</span><span style="color: #F8F8F2">:hover {</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">    border</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">color: #</span><span style="color: #BD93F9">999</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">  }</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4">/*Sử dụng chỉ cần include mixins đã khai báo*/</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">div {</span></span>
<span class="line"><span style="color: #F8F8F2">  @</span><span style="color: #50FA7B; font-style: italic">include</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">bordered</span><span style="color: #F8F8F2">(1px);</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<h6 id="nested" class="wp-block-heading"><strong>Nested</strong></h6>



<p>Khi mà mới học lập trình HTML, CSS thì mình đã từng thế này, và mình nghĩ cũng nhiều bạn đã từng như mình.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="&lt;div class=&quot;container&quot;&gt;

    &lt;ul class=&quot;nav&quot;&gt;

        &lt;li class=&quot;item&quot;&gt;

            &lt;a class=&quot;item-children&quot;&gt;Hello&lt;/a&gt;

        &lt;/li&gt;

    &lt;/ul&gt;

&lt;/div&gt;" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">&lt;</span><span style="color: #FF79C6">div</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B; font-style: italic">class</span><span style="color: #FF79C6">=</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">container</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    &lt;</span><span style="color: #FF79C6">ul</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B; font-style: italic">class</span><span style="color: #FF79C6">=</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">nav</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">        &lt;</span><span style="color: #FF79C6">li</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B; font-style: italic">class</span><span style="color: #FF79C6">=</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">item</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">            &lt;</span><span style="color: #FF79C6">a</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B; font-style: italic">class</span><span style="color: #FF79C6">=</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">item-children</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">&gt;Hello&lt;/</span><span style="color: #FF79C6">a</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">        &lt;/</span><span style="color: #FF79C6">li</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    &lt;/</span><span style="color: #FF79C6">ul</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">&lt;/</span><span style="color: #FF79C6">div</span><span style="color: #F8F8F2">&gt;</span></span></code></pre></div>



<p>Xong khi viết CSS sẽ dạng dạng như thế này.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code=".container {

  width: 100%;

}

.container .nav {

  font-size: 14px;

}

.container .nav .item {

  float: left;

}

.container .nav .item .children {

  texx-decoration: none

}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">.container {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  width: </span><span style="color: #BD93F9">100</span><span style="color: #FF79C6">%</span><span style="color: #F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.container .nav {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">size: 14px;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.container .nav .item {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  float: left;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.container .nav .item .children {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  texx</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">decoration: none</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<p>Nhìn đoạn code trên có khiếp không, lặp đi lặp lại các selector, đó là chỉ với trường hợp mình có 4 item con con bên trong. Chả lẽ giờ có đến chục item con con bên trong các bạn cũng viết kiểu như thế này thì rõ ràng là không hề ổn chút nào. Lúc người khác đọc lại code phải dò dò xem đâu là cha của nó các kiểu con đà điểu thì sẽ rất mất thời gian.</p>



<p>Nếu như ai còn đang viết kiểu như thế mình khuyên nên bỏ đi và áp dụng ngay kiểu nested rules như sau đây.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code=".container {

    width: 100%;

    .nav {

        font-size: 14px;

        .item {

            float: left;

            .children {

                text-decoration: none;

            }

        }

    }

}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">.container {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    width: </span><span style="color: #BD93F9">100</span><span style="color: #FF79C6">%</span><span style="color: #F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    .nav {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">        font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">size: 14px;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">        .item {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">            float: left;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">            .children {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">                text</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">decoration: none;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">            }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">        }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<p>Nhìn trông code có phải gọn gàng, dễ quản lí và chuyên nghiệp hơn chút rồi đấy. Hãy áp dụng nhé các bạn.</p>



<p>Ngoài ra còn rất nhiều các tính năng khác mà các bạn có thể lên trang chủ của nó tìm đọc nếu muốn.</p>



<h5 id="ki-thuat-oocss" class="wp-block-heading"><strong>Kĩ thuật OOCSS</strong></h5>



<p>OOCSS là viết tắt của Object-Oriented CSS, hướng đối tượng trong CSS. Cụ thể mà tính chất hướng đối tượng này đó là tính kế thừa.</p>



<p>Kĩ thuật này được sinh ra nhằm hạn chế việc trùng lặp code.</p>



<p>Khai báo class bổ trợ.</p>



<p>Nếu bạn nào đã sử dụng Bootstrap thì đây chính là kinh nghiệm khá hay mà chúng ta có thể học hỏi từ Bootstrap.</p>



<p>Viết cs ngắn gọn</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="&lt;!DOCTYPE html&gt;

&lt;html&gt;

  &lt;head&gt;
  
    &lt;style&gt;
    
    body {
      /* Thay vì viết từng thuộc tính */
    
      font-style: italic;
    
      font-weight: bold;
    
      font-size: .8em;
    
      line-height: 1.2;
    
      font-family: Arial, sans-serif;
    
      background-image: url(&quot;https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSjnIfv9UzLhhQwAG_0mxil1Z5KyQT7xROTYA&amp;usqp=CAU&quot;);
  
      background-repeat: no-repeat;
  
      background-position: center center;
  
      background-attachment: fixed;
    
      background-color: #fff;
      /* thì chúng ta có thể viết gọn lại như sau */
  
      font: italic bold .8em/1.2 Arial, sans-serif;
    
      background: #fff url(&quot;https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSjnIfv9UzLhhQwAG_0mxil1Z5KyQT7xROTYA&amp;usqp=CAU&quot;) no-repeat fixed center center;
    
    }
    
    h1 {
    
      color: green;
    
      text-align: center;
    
    }
    
    p {
    
      font-family: verdana;
    
      font-size: 20px;
    
      position: fixed;
    
      bottom: 0;
    
      text-align: center;
    
      width: 100%;
    
    }
    
    &lt;/style&gt;
  
  &lt;/head&gt;

  &lt;body&gt;
  
    &lt;h1&gt;Welcome to&lt;/h1&gt;
    
    &lt;p&gt;All Rights Reserved&lt;/p&gt;
  
  &lt;/body&gt;

&lt;/html&gt;" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #FF79C6">&lt;!</span><span style="color: #F8F8F2">DOCTYPE html</span><span style="color: #FF79C6">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">&lt;</span><span style="color: #FF79C6">html</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  &lt;</span><span style="color: #FF79C6">head</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">    &lt;</span><span style="color: #FF79C6">style</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    body </span><span style="color: #FF79C6">{</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #6272A4">/* Thay vì viết từng thuộc tính */</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">style: italic;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">weight: bold;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">size: .8em;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      line</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">height: </span><span style="color: #BD93F9">1.2</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">family: Arial, sans</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">serif;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      background</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">image: </span><span style="color: #50FA7B">url</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSjnIfv9UzLhhQwAG_0mxil1Z5KyQT7xROTYA&amp;usqp=CAU</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">);</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">      background</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">repeat: no</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">repeat;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">      background</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">position: center center;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">      background</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">attachment: fixed;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      background</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">color: #fff;</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #6272A4">/* thì chúng ta có thể viết gọn lại như sau */</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">      font: italic bold .8em</span><span style="color: #FF79C6">/</span><span style="color: #BD93F9">1.2</span><span style="color: #F8F8F2"> Arial, sans</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">serif;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      background: #fff </span><span style="color: #50FA7B">url</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSjnIfv9UzLhhQwAG_0mxil1Z5KyQT7xROTYA&amp;usqp=CAU</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">) no</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">repeat fixed center center;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">}</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    h1 </span><span style="color: #FF79C6">{</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      color: green;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      text</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">align: center;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">}</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    p </span><span style="color: #FF79C6">{</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">family: verdana;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">size: 20px;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      position: fixed;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      bottom: </span><span style="color: #BD93F9">0</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      text</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">align: center;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      width: </span><span style="color: #BD93F9">100</span><span style="color: #FF79C6">%</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">}</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    &lt;/</span><span style="color: #FF79C6">style</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">  &lt;/</span><span style="color: #FF79C6">head</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  &lt;</span><span style="color: #FF79C6">body</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">    &lt;</span><span style="color: #FF79C6">h1</span><span style="color: #F8F8F2">&gt;Welcome to&lt;/</span><span style="color: #FF79C6">h1</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    &lt;</span><span style="color: #FF79C6">p</span><span style="color: #F8F8F2">&gt;All Rights Reserved&lt;/</span><span style="color: #FF79C6">p</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">  &lt;/</span><span style="color: #FF79C6">body</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">&lt;/</span><span style="color: #FF79C6">html</span><span style="color: #F8F8F2">&gt;</span></span></code></pre></div>



<p>Lưu ý &amp; suy ngẫm</p>



<p>Một selector với trọng số lớn liệu có tốt không?</p>



<p> Ví dụ:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="/* Trọng số là 2,3,4 */

#main article.sports table#stats tr:nth-child(even) td:last-child {

  ...

}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #6272A4">/* Trọng số là 2,3,4 */</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">#main article.sports table#stats tr:nth</span><span style="color: #FF79C6">-</span><span style="color: #50FA7B">child</span><span style="color: #F8F8F2">(even) td:last</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">child {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6">...</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<p>Với trọng số là 2,3,4, bạn sẽ rất khó để override nó, và sẽ làm cho code của bạn rối rắm và khó để maintain hay extend.</p>



<p>Bất kì khi nào bạn rơi vào tình huống không hiểu vì sao element của mình lại có style không như mong muốn, thì Specificity sẽ giúp bạn. Tuy nhiên thay vì ngồi đếm trọng số bằng tay, giờ đây với công cụ devtools mạnh mẽ của các browser thì việc xác định lỗi style là vô cùng đơn giản. Tuy nhiên các công cụ này cũng xây dựng trên nguyên lý CSS Specificity mà thôi chứ không có gì khác biệt đâu. Bạn có thể tham khảo hình ảnh bên dưới để hiểu hơn về cách đánh trọng số.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="791" height="1024" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-791x1024.png" alt="" class="wp-image-1235" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-791x1024.png 791w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-232x300.png 232w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-768x994.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-1187x1536.png 1187w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-380x492.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-800x1035.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-1160x1501.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1.png 1275w" sizes="(max-width: 791px) 100vw, 791px" /></figure>



<p>Specificity chỉ có ý nghĩa nếu một element có nhiều selector cùng trỏ (target) đến nó. Nói nôm na là nếu cuộc chiến mà chỉ có 1 người tham gia thì hiển nhiên người đó thắng rồi.</p>



<p>Trong CSS có việc kế thừa style từ các element cha. Tuy nhiên việc kế thừa này sẽ luôn xếp sau những selector trỏ (target) đích danh đến element nhé. Bạn để ý khi sử dụng devtools là thấy thôi.</p>



<p>Việc có nên sử dụng inline styles không vẫn là một vấn đề gây tranh cãi. Một số linter sẽ warning nếu bạn viết inline styles, nhưng bạn vẫn có thể tắt warning đó đi nếu muốn. Một trong những lý do là vì trọng số của nó quá cao sẽ dễ gây ra các lỗi không mong muốn, hoặc sẽ rất khó để override và buộc phải dùng đến !important. Một lý do khác nữa là với nhiều “chuyên gia” thì CSS nên đặt trong các file .css để dễ quản lý, chứ nếu nằm trong style (html) thì rối loạn lên hết?</p>



<p>Mặc dù trùm cuối !important vô cùng mạnh mẽ, việc dùng đến !important không phải là một giải pháp tốt và cần hạn chế sử dụng, giống như inline styles mà mình vừa đề cập đến. Trước khi buộc phải dùng đến !important, bạn hãy suy xét cẩn thận xem chúng ta có thể sử dụng CSS Specificity để đạt được mục đích hay không.</p>



<h5 id="bem" class="wp-block-heading">BEM</h5>



<p>Đây là một kĩ thuật để đặt tên cho class trong HTML/CSS. Cách đặt tên class với BEM sẽ làm code của chúng ta nhìn rất chuyên nghiệp và có logic hơn rất nhiều.</p>



<p>Việc áp dụng kĩ thuật này vào trong project sẽ giúp chúng ta dễ dàng maintain và phát triển, dễ dàng hơn với những người vào dự án sau này khi đọc lại code.</p>



<p>BEM là viết tắt của Block, Element và Modifier. Nguyên tắc để đặt tên class sẽ dựa trên 3 thành phần kia để chúng ta đặt tên class cho chuẩn chỉ.</p>



<p>Block: Một khối độc lập mang ý nghĩa riêng, mô tả rõ mục đích của nó. (header, container, menu&#8230;). Block sẽ chứa những định dạng chung để có thể tái sử dụng.</p>



<p>Element: Là một phần thuộc một khối và thực hiện một chức năng cụ thể, element này sẽ phụ thuộc vào block để đặt tên sao cho phải.</p>



<p>Modifier: Modifier sẽ dùng để thao tác nếu muốn thay đổi cách hiển thị của block hoặc element.</p>



<p>Ở đây mình không phải muốn giải thích hay giới thiệu chi tiết về 2 “phương pháp” này, mà chỉ muốn chỉ ra một vài điểm liên quan với Specificity thôi. Ngoài BEM và ITCSS ra còn có nhiều phương pháp khác nữa, nhưng cơ bản đều xây dựng trên Specificity cả.</p>



<p>BEM: mình mặc định bạn đã biết đến BEM, thì một vài tôn chỉ của nó có thể kể đến như:</p>



<p>Tránh sử dụng id (#foo): lý do thì như mình đã chia sẻ, id có trọng số lớn và khá khó để override, nên việc cố gắng override nó sẽ dễ đẩy CSS của bạn đến một tương lai không mấy sáng sủa.</p>



<p>Tránh nested selector, cố gắng làm phẳng selector: cũng cùng lý do, nested selector cũng làm tăng trọng số của selector. </p>



<p>Ví dụ BEM sẽ khuyến khích:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="/* BEM thích điều này, trọng số chỉ là 0,1,0 nhưng vẫn rất specific

và khó bị conflict */



.block {}

.block__elem1 {}

.block__elem2 {}

.block__elem3 {}

/* Trọng số sẽ là 0,2,0, cũng không quá tệ, nhưng BEM không khuyến khích

và nó cũng rất dễ bị conflict. */

.block {}

.block .elem1 {}

.block .elem2 {}

.block .elem3 {}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #6272A4">/* BEM thích điều này, trọng số chỉ là 0,1,0 nhưng vẫn rất specific</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4">và khó bị conflict */</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block {}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block__elem1 {}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block__elem2 {}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block__elem3 {}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4">/* Trọng số sẽ là 0,2,0, cũng không quá tệ, nhưng BEM không khuyến khích</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4">và nó cũng rất dễ bị conflict. */</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block {}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block .elem1 {}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block .elem2 {}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block .elem3 {}</span></span></code></pre></div>



<h5 id="tong-ket" class="wp-block-heading"><strong>Tổng kết</strong></h5>



<p>Trên đây là một số kiến thức nhỏ mình đã tìm hiểu được, hi vọng nó sẽ giúp ích cho bạn trong dự án.</p>
<p>The post <a href="https://blog.tomosia.com.vn/toi-uu-cach-viet-css/">Tối ưu cách viết CSS</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/toi-uu-cach-viet-css/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
