This is what I do:
Assume you use cpanel:
1. backup the entire mysql file dump using phpmyadmin.
2. backup the entire directory via file manager by compressing in a .tar.gz file.
3. download those #1 and #2 to your desktop hard drive
4. create your new hosting account
5. upload your compressed .tar.gz and extract exactly to your hosting directory using your file manager
6. create a new database and username and password
7. use phpmyadmin to import your backed up mysql dump file
7. edit your wp-config.php to match your new database and username and password
8. edit your wp-config.php to match your new domain name by adding:
define('WP_HOME','httpnewdomain');
define('WP_SITEURL','httpnewdomain');
to the correct part of the file.
9. Login to your httpnewdomain_com/wp-admin
10. Install the plugin httpwordpress_org/plugins/search-and-replace/
11. Search for all instances of your httpolddomain_com and replace with newdomain_com
If you make a mistake in search and replace, all you need to do is drop the tables in your new database and import your backup again.
I have done this many times.